2011-01-05 61 views
0

我想做到以下幾點:我可以將進程鏈接到bash中的文件嗎?

我要一個過程鏈接到文件F,因此:

  • 若F自敗一個崩潰。
  • F只會在A完成後消失。

這可能嗎?非常感謝你。

+0

如果你說你想什麼它可能會幫助去完成。 – 2011-01-05 21:40:21

+0

我想要監視2個進程,因此如果其中一個崩潰,請讓另一個崩潰。我讀過使用PID來殺死它並不是一個好方法,因爲另一個進程可能以相同的PID開始。因此,我正在尋找避免使用PID的方法。 – 2011-01-06 12:39:33

回答

0

你不應該避免PID。它們是進程標識符,並且意在使用。

Bash自動監控它啓動的子進程。最新的後臺進程ID保存在$!中。 Bash還支持使用'%n'語法的作業控制。

您可以使用陷阱SIGCHLD來捕獲子進程狀態更改,並且可以等待一個或所有子進程使用wait命令完成。

這裏是你的兩個過程監控的一個粗略的估計,其中包括「JOB1」和「作業2」正在啓動的示例腳本:

job1 & # start job1 in background 
j1pid=$! # get its process id 
job2 & # start job2 in background 
j2pid=$1 # get its process id 

trap 'err=1' ERR # trap all errors 
err= 
wait $j1pid # wait for job1 to complete 

# at this point job1 could have completed normally, 
# or either process could have had an error 

trap - ERR # revert to "normal" handling of most errors 

# kill the processes nicely, or abruptly 
# kill -TERM sends the TERM signal to the process, which it can trap 
# and do whatever pre-exit process is needed. 
# kill -9 cannot be trapped. 

for pid in $j1pid $j2pid ; do 
    kill -TERM $pid 2>/dev/null || kill -9 $pid 
done 
0

在Linux上你幾乎已經擁有了這個屬性的文件。如果您創建了一個進程,那麼/ proc/procNum將在進程處於活動狀態時存在。舉例來說,如果你的進程號是1050,那麼/ proc/1050將一直存在,直到進程死亡。我不知道刪除這個文件是否會殺死這個進程,但你可以嘗試將兩者結合在一起。

+0

感謝您的信息!我檢查過它,它是一個包含大量文件的目錄。我無法刪除它(即使我使用sudo),所以我無法做我正在尋找的東西。無論如何謝謝你:) – 2011-01-06 12:30:08

相關問題