Pelajari Perbedaan Antara $$ dan $ Bashpid di Bash
- 3619
- 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 $ bashpid
Temukan 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.SH
Proses 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.SH
Pid 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 bash
Halaman 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 $ Bashpid
Penugasan 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 $ Bashpid
Bashpid 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 $ Bashpid
Menugaskan 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 »