Pelajari Perbedaan Antara $$ dan $ Bashpid di Bash
- 3566
- 738
- Dominick Barton
Baru -baru ini saya mengerjakan skrip shell dan saya melihat perbedaan yang signifikan dalam bagaimana variabel khusus bash $
Dan Bashpid
berperilaku. Setiap proses yang berjalan di Linux akan ditugaskan dengan suatu proses PENGENAL Dan begitulah cara sistem operasi menangani proses.
Demikian pula, sesi terminal bash Anda juga akan ditugaskan dengan ID proses. Ada variabel khusus yang disebut "$"
Dan "$ Bashpid"
yang menyimpan ID proses shell saat ini.
Silakan jalankan perintah di bawah ini untuk melihat apa ID proses cangkang Anda saat ini. Keduanya "$"
Dan "$ Bashpid"
akan mengembalikan nilai yang sama.
$ echo $$ # mencetak variabel khusus $ $ echo $ bashpid # mencetak varibale $ bashpidTemukan ID Proses Shell saat ini
Dalam bash ketika kami memanggil program eksternal apa pun dari shell, itu akan membuat proses/subshell anak dan program akan diserahkan hanya dalam proses anak. Lihat contoh di bawah di mana saya meletakkan perintah monitor proses sederhana dalam skrip yang disebut "Sampel.SH" Untuk menunjukkan bagaimana shell induk menciptakan subshell untuk menjalankan program.
#!/usr/bin/env bash ps -ef ---forest | grep -i bash
Sekarang saat menjalankan skrip ini kita bisa mendapatkan id proses bash. Dari gambar di bawah ini, Anda dapat memahami ketika saya memanggil skrip bash menciptakan proses anak dan menjalankan skrip.
$ ./Sampel.SHProses Anak Linux
Sekarang mari kita gunakan keduanya "$"
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.
$ ./Sampel.SHPid proses anak
Baiklah, ia mengembalikan ID proses yang sama. Inilah perbedaan sebenarnya. Mari kita buat proses anak lain di dalam skrip dengan menjalankan perintah di dalam tanda kurung ()
.
# Menyimpan PID ke dalam variabel ... var_hash = $ (echo $$) var_bashpid = $ (echo $ bashpid) echo "nilai var_hash ==> $ var_hash" gema "nilai var_bashpid ==> $ var_bashpid"Perbedaan PID
Di pesta, Tanda kurung akan memohon proses anak dan menjalankan apa pun yang masuk ke dalam tanda kurung. Dalam hal ini, keduanya $
Dan $ Bashpid
harus menyimpan ID proses anak baru. Tetapi dari gambar di atas, Anda dapat melihat ada perbedaan di mana $
toko 382 yang merupakan ID induk (ID proses skrip Sampel.SH), Dan $ Bashpid
Menyimpan ID proses anak yang dibuat yang dibuat oleh tanda kurung.
Sekarang mari kita coba memahami perilaku ini. Kita akan melihat apa yang dikatakan halaman pria itu.
$ man bashHalaman pria untuk $ Halaman pria untuk Bashpid
Saat Anda menggunakan $
, Bahkan di subshell, ia menyimpan ID proses dari proses induk yang dibuatnya. Tetapi Bashpid
akan menyimpan ID proses saat ini, saya.e Saat dipanggil di dalam tanda kurung itu akan menyimpan ID proses anak.
Kami tidak dapat menetapkan atau memodifikasi variabel $
, Tetapi Bashpid
dapat dipindahkan tetapi tidak berpengaruh.
$ $ = 10 $ Bashpid = 10 $ echo $ BashpidPenugasan variabel bash
Dimungkinkan untuk tidak disetel Bashpid. Saat Anda tidak berada dalam kondisi khusus dan Anda juga dapat mulai menggunakan ini sebagai variabel normal.
$ Unset Bashpid $ echo $ Bashpid $ Bashpid = "tecmint" $ echo $ BashpidBashpid yang tidak diatur
Bahkan jika Anda mencoba menetapkan ID proses shell, itu akan diperlakukan sebagai variabel yang ditentukan pengguna karena sudah kehilangan keadaan khusus.
$ Bashpid = $ (echo $$) $ echo $$; echo $ BashpidMenugaskan kembali Bashpid
Dalam hal ini, Anda harus menggunakan sesi terminal baru untuk Bashpid untuk mendapatkan keadaan khusus.
Itu untuk artikel ini. Kami telah melihat perbedaan antara $
Dan Bashpid
Dan bagaimana mereka berperilaku dalam artikel ini. Pergi melalui artikel ini dan bagikan umpan balik berharga Anda dengan kami.
- « Cara memperbaiki partisi NTFS gagal memasang kesalahan di linux
- Cara Menginstal dan Mengkonfigurasi Server OpenVPN di Centos 8/7 »