簡體   English   中英

Linux/Unix Bash 腳本如何知道自己的 PID?

[英]How does a Linux/Unix Bash script know its own PID?

我在 Bash 中有一個名為Script.sh的腳本,它需要知道自己的 PID(即我需要在 Script.sh 中獲取 PID)

知道如何做到這一點嗎?

變量$$包含 PID。

使用$BASHPID$$

有關更多信息,包括兩者之間的差異,請參閱 [手冊][1]。

TL;DRTFM

除了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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM