Belajar Perbezaan antara $$ dan $ Bashpid di Bash

Belajar Perbezaan antara $$ dan $ Bashpid di Bash

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.

Baca yang berkaitan: Belajar perbezaan antara sumber dan forking di bash

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.