2013-09-26 33 views
0

我有以下問題:我有一個由執行內部後臺進程的腳本:如何獲得一個由腳本父腳本中的腳本調用進程的PID

====myinternalscript==== 
... 
myinternalscript-program & 
... 

這是從一個叫通過對myinternalscript程序終止等待腳本:

====mainscript==== 
... 
myinternalscript 
while [ "$(ps -u ${CURRENT_USER} | grep myinternalscript-program)" ]; 
... 

問題是當我想再次撥打mainscript第一次調用之前結束。這使得,如果與第一通話myinternalscript程序第二myinternalscript程序之前結束第一個呼叫mainscript結束,暫停狀態仍然爲真(因爲由稱爲myinternalscript程序第二mainscript調用)和第一mainscript調用不會前進,直到第二mainscript稱爲myinternalscript程序也完成。

我的解決辦法是:

====mainscript==== 
... 
myinternalscript 
internalpid = #some way to get the myinternalscript-program PID 
while [ "$(ps -u ${CURRENT_USER} | grep myinternalscript-program| grep $internalpid)" ]; 
... 

其中 「internalpid」 有myinternalscript的執行過程中被稱爲myinternalscript程序的PID。

正如其中一個答案所示,$!在myinternalscript程序後可以給我我需要在myinternalscript PID信息,然後我可以想像一些方法來獲取這些信息mainscript,但我沒有權限編輯myinternalscript。在此背景下面臨的挑戰是:

如何得到myinternalscript程序 PID在mainscript 沒有編輯myinternalscript

很顯然,我也可以使用一些其他的方式來暫停mainscript執行來解決問題,但它讓我爲難,如果我想做的事本來可以實現的。

有何評論?

回答

0

當前腳本的PID位於$$ bash變量中。不需要解析ps輸出。

0

您可以從其他終端的腳本中創建PID文件。

echo $$ > /tmp/script1.pid 

,然後你必須檢查它在腳本

checkpid=$(cat /tmp/script1.pid) 
while [ "x$(ps $checkpid | grep -v PID)" != "x" ];do echo still running;sleep 1;done 

,或者如果可以運行在同一個終端腳本(我多少知道你需要運行它平行),你可以在後臺運行並使用「等待」關鍵字等待後臺作業:

script1.sh & 
script2.sh & 
wait 
echo "scripts finished" 
相關問題