Belajar Perbezaan antara $$ dan $ Bashpid di Bash
- 1831
- 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 $ bashpid
Cari 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.sh
Proses 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.sh
Pid 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 bash
Halaman 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 $ bashpid
Tugasan 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 $ bashpid
Unset 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 $ bashpid
Menetapkan 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 »