提問: 我想要知道運作中腳本子shell的程序id。我該如何在shell腳本中得到pid。
當我在執行shell腳本時,它會啟動一個叫子shell的程序。作為主shell的子程序,子shell将shell腳本中的指令作為批處理運作(是以稱為“批處理程序”)。

在某些情況下,你也許想要知道運作中的子shell的pid。這個pid資訊可以在不同的情況下使用。比如,你可以使用shell腳本的pid在/tmp下建立一個唯一的臨時檔案。有時侯腳本需要檢測所有運作的程序,它可以從程序清單中排除自身的子shell。
在bash中,子shell程序的pid存儲在一個特殊的變量‘$$’中。這個變量隻讀,你不可以在腳本中修改它。比如:
<code>#!/bin/bash</code>
<code></code>
<code>echo "pid of this script: $$"</code>
上面的腳本會得到下面的輸出:
pid of this script: 6583
除了<code>$$</code>, bash shell還會導出其他的隻讀變量。比如,ppid存儲子shell父程序的id(也就是主shell)。uid存儲了執行這個腳本的目前使用者id。比如:
#!/bin/bash
echo "pid of this script: $$"
echo "ppid of this script: $ppid"
echo "uid of this script: $uid"
輸出是:
pid of this script: 6686
ppid of this script: 4656
uid of this script: 1000
上面輸出中,pid每次執行都會變化。這個因為每次運作都會建立一個新的shell。另一方面,ppid每次都會一樣隻要你在同一個shell中運作。
對于所有bash内置變量清單,參考man頁。
$ man bash
----------------------------------------------------------------------------------------------------------------------------