![](/img/trans.png)
[英]How would i get a process pid which is running in a bash script and know when its done
[英]How does a Linux/Unix Bash script know its own PID?
我在 Bash 中有一個名為Script.sh
的腳本,它需要知道自己的 PID(即我需要在 Script.sh 中獲取 PID)
知道如何做到這一點嗎?
變量$$
包含 PID。
使用$BASHPID
或$$
有關更多信息,包括兩者之間的差異,請參閱 [手冊][1]。
TL;DRTFM
$$
擴展為 shell 的進程 ID。
()
子shell 中,它擴展為調用shell 的進程ID,而不是子shell。$BASHPID
擴展為當前 Bash 進程的進程 ID(bash 4 的新功能)。
()
子shell中,它擴展為子shell的進程ID [1]: http : //www.gnu.org/software/bash/manual/bashref.html#Bash-Variables除了Jefromi引用的Advanced Bash Scripting Guide 中給出的示例之外,這些示例展示了管道如何創建子外殼:
$ echo $$ $BASHPID | cat -
11656 31528
$ echo $$ $BASHPID
11656 11656
$ echo $$ | while read line; do echo $line $$ $BASHPID; done
11656 11656 31497
$ while read line; do echo $line $$ $BASHPID; done <<< $$
11656 11656 11656
PID 存儲在$$
。
示例: kill -9 $$
將終止調用它的 shell 實例。
您可以使用$$
變量。
如果進程是子進程並且沒有設置$BASHPID,則可以查詢正在運行的進程創建的子進程的ppid。 它可能有點難看,但它有效。 例子:
sleep 1 &
mypid=$(ps -o ppid= -p "$!")
無論您身在何處(在交互式命令行或腳本中),並且在您無權訪問 $BASHPID 的情況下,您都可以通過以下方式訪問您當前的 shell pid:
bash -c 'echo $PPID'
其中簡單的引號對於防止過早的字符串解釋至關重要(以確保解釋發生在子進程中,而不是在當前進程中)。 原理就是創建一個子進程並要求其父進程pid,即“我自己”。 此代碼比基於 ps 的 Joakim 解決方案更簡單。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.