天天看點

Linux有問必答:如何在腳本中擷取程序ID(PID)Linux有問必答:如何在腳本中擷取程序ID(PID)

提問: 我想要知道運作中腳本子shell的程序id。我該如何在shell腳本中得到pid。

當我在執行shell腳本時,它會啟動一個叫子shell的程序。作為主shell的子程序,子shell将shell腳本中的指令作為批處理運作(是以稱為“批處理程序”)。

Linux有問必答:如何在腳本中擷取程式ID(PID)Linux有問必答:如何在腳本中擷取程式ID(PID)

在某些情況下,你也許想要知道運作中的子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中運作。

Linux有問必答:如何在腳本中擷取程式ID(PID)Linux有問必答:如何在腳本中擷取程式ID(PID)

對于所有bash内置變量清單,參考man頁。

$ man bash

----------------------------------------------------------------------------------------------------------------------------

繼續閱讀