Belajar Perbezaan antara $$ dan $ Bashpid di Bash
- 1780
- 155
- Don Will
Baru -baru ini saya sedang mengusahakan skrip shell dan saya melihat perbezaan yang signifikan dalam bagaimana pemboleh ubah khas bash $
dan Bashpid
berkelakuan. Setiap proses yang berjalan di Linux akan diberikan dengan proses ID Dan begitulah sistem operasi mengendalikan proses.
Begitu juga, sesi terminal bash anda juga akan ditugaskan dengan ID proses. Terdapat pemboleh ubah khas yang dipanggil "$"
dan "$ Bashpid"
yang menyimpan id proses shell semasa.
Teruskan dan jalankan arahan di bawah untuk melihat apakah id proses cangkang semasa anda. Kedua -duanya "$"
dan "$ Bashpid"
akan mengembalikan nilai yang sama.
$ echo $$ # Percetakan pembolehubah khas $ $ echo $ bashpid # mencetak varibale $ bashpidCari ID Proses Shell Semasa
Dalam bash Apabila kita memanggil mana -mana program luaran dari shell, ia akan mewujudkan proses kanak -kanak/subshell dan program itu akan dikemukakan dalam proses kanak -kanak sahaja. Lihat di bawah Contoh di mana saya meletakkan arahan monitor proses mudah dalam skrip yang dipanggil "Sampel.sh " Untuk menunjukkan bagaimana cangkang induk mencipta subshell untuk menjalankan program.
#!/usr/bin/env bash ps -ef --forest | grep -i bash
Sekarang dalam menjalankan skrip ini kita boleh mendapatkan id proses bash. Dari gambar di bawah, anda boleh faham apabila saya memanggil skrip bash membuat proses kanak -kanak dan menjalankan skrip.
$ ./Contoh.shProses kanak -kanak Linux
Sekarang mari kita gunakan kedua -duanya "$"
dan "$ Bashpid"
di dalam skrip dan lihat apa yang dikembalikan.
#!/usr/bin/env bash echo "===========================" PS -ef --forest | grep -i bash echo "===========================" echo "pid menggunakan $ untuk skrip $ 0 ==> $$" echo "PID Menggunakan Bashpid untuk Skrip $ 0 ==> $ Bashpid" echo
Sekarang jalankan skrip lagi.
$ ./Contoh.shPid of Child Process
Baiklah, ia mengembalikan ID proses yang sama. Inilah perbezaan sebenar. Mari buat proses anak lain di dalam skrip dengan menjalankan arahan di dalamnya kurungan ()
.
# Menyimpan pid ke dalam pembolehubah ... var_hash = $ (echo $$) var_bashpid = $ (echo $ bashpid) echo "nilai var_hash ==> $ var_hash" echo "nilai var_bashpid ==> $ var_bashpid"Perbezaan dalam PID
Dalam bash, Tanda kurung akan memanggil proses kanak -kanak dan menjalankan apa sahaja yang terdapat di dalam kurungan. Dalam kes itu, kedua -duanya $
dan $ Bashpid
harus menyimpan id proses anak baru. Tetapi dari imej di atas, anda dapat melihat terdapat perbezaan di mana $
kedai 382 yang merupakan ID induk (ID proses skrip Contoh.sh), dan $ Bashpid
menyimpan ID proses kanak -kanak yang dicipta oleh kurungan.
Sekarang mari kita cuba memahami tingkah laku ini. Kami akan melihat apa yang dikatakan oleh lelaki itu.
$ man bashHalaman lelaki untuk $ Halaman lelaki untuk Bashpid
Semasa anda menggunakan $
, Malah dalam subshell, ia menyimpan proses id proses induk yang dibuat dari. Tetapi Bashpid
akan menyimpan ID proses semasa, i.e Apabila dipanggil di dalam kurungan, ia akan menyimpan id proses kanak -kanak.
Kita tidak dapat memberikan atau mengubah suai pembolehubah $
, tetapi Bashpid
boleh ditugaskan semula tetapi tidak mempunyai kesan.
$ $ = 10 $ bashpid = 10 $ echo $ bashpidTugasan pemboleh ubah bash
Adalah mungkin untuk tidak jelas Bashpid. Apabila anda tidak tersendiri, ia kehilangan keadaan khasnya dan juga anda boleh mula menggunakan ini sebagai pemboleh ubah biasa.
$ unset bashpid $ echo $ bashpid $ bashpid = "tecmint" $ echo $ bashpidUnset Bashpid
Walaupun anda cuba menetapkan ID proses shell, ia akan dianggap sebagai pemboleh ubah yang ditentukan oleh pengguna kerana sudah kehilangan keadaan khasnya.
$ Bashpid = $ (echo $$) $ echo $$; echo $ bashpidMenetapkan semula Bashpid
Dalam kes ini, anda perlu menggunakan sesi terminal baru untuk Bashpid untuk mendapatkan keadaan istimewa.
Itu sahaja untuk artikel ini. Kami telah melihat perbezaan antara $
dan Bashpid
dan bagaimana mereka berkelakuan dalam artikel ini. Pergi melalui artikel ini dan kongsi maklum balas berharga anda dengan kami.
- « Cara Memperbaiki Partition NTFS Gagal Melancarkan Kesalahan di Linux
- Cara Memasang dan Mengkonfigurasi Pelayan OpenVPN di CentOS 8/7 »