2013-05-18 29 views
1
nohup someprogram &> $LOG & 
echo "what happen: $?" 

而當我無法訪問$ LOG或某個程序退出的狀態不是0時,我希望能夠檢測到這一點。由nohup創建的進程狀態

目前,當存在許可錯誤時,$?返回0.是否有可能讓bash告訴我執行前面的語句有問題?

回答

1

嘗試等待以返回您的子進程的狀態。

nohup someprogram &> $LOG & 
wait $! 
echo $? 
+0

這個過程沒有終止,所以等待似乎永遠等待,永遠不會迴應。有沒有可能繼續執行一些超時? – nurettin

0

如果你背景的過程,你不能立即可靠地測試它是否失敗 - 因爲它可能仍然是運行之前,無論何時你檢查它失敗。要獲得可靠的解決方案,您必須登錄wait

但是,如果你不關心全reliablitiy,你只是想檢查是否你打電話躲過了第二的某些部分的PROGRAMM,你可以做

cpid=$! 
sleep 0.1 
jobs -l | grep $cpid | grep running && working=1 

的片段可以提高,但它應該給你基本的想法。

請注意,一些睡眠實現只支持整數。 GNU的睡眠,你會發現在大多數Linux發行版上,也支持浮動。