Pelajari Perbedaan Antara $$ dan $ Bashpid di Bash

Pelajari Perbedaan Antara $$ dan $ Bashpid di Bash

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.

Bacaan terkait: Pelajari perbedaan antara sumber dan forking di pesta bash

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.