提問: 我想要知道運(yùn)行中腳本子shell的進(jìn)程id。我該如何在shell腳本中得到PID。
當(dāng)我在執(zhí)行shell腳本時(shí),它會啟動(dòng)一個(gè)叫子shell的進(jìn)程。作為主shell的子進(jìn)程,子shell將shell腳本中的命令作為批處理運(yùn)行(因此稱為“批處理進(jìn)程”)。
在某些情況下,你也許想要知道運(yùn)行中的子shell的PID。這個(gè)PID信息可以在不同的情況下使用。比如,你可以使用shell腳本的PID在/tmp下創(chuàng)建一個(gè)唯一的臨時(shí)文件。有時(shí)侯腳本需要檢測所有運(yùn)行的進(jìn)程,它可以從進(jìn)程列表中排除自身的子shell。
在bash中,子shell進(jìn)程的PID存儲在一個(gè)特殊的變量‘$$'中。這個(gè)變量只讀,你不可以在腳本中修改它。比如:
上面的腳本會得到下面的輸出:
除了$$, bash shell還會導(dǎo)出其他的只讀變量。比如,PPID存儲子shell父進(jìn)程的ID(也就是主shell)。UID存儲了執(zhí)行這個(gè)腳本的當(dāng)前用戶ID。比如:
輸出是:
上面輸出中,PID每次執(zhí)行都會變化。這個(gè)因?yàn)槊看芜\(yùn)行都會創(chuàng)建一個(gè)新的shell。另一方面,PPID每次都會一樣只要你在同一個(gè)shell中運(yùn)行。
對于所有bash內(nèi)置變量列表,參考man頁。
新聞熱點(diǎn)
疑難解答
圖片精選