2017-08-29 71 views
0

我有我通過運行2個過程:擊 - 殺死所有的並行處理,如果一個失敗

init_thing & start_thing 

init_thing投票start_thing的日誌,它認爲表明start_thing已經成功地開始了一個特定的行,然後對它執行一些命令(例如添加用戶)。

如果init_thing函數認爲start_thing超時,則函數可能會失敗,返回非零值。 start_thing函數可能會失敗,但如果成功,它將永遠運行。

我想要做的是殺start_thing如果init_thing失敗。

我在GNU parallel的許多答案中都看到過,但它似乎依賴於兩個進程完成(即用零退出代碼退出),在我的情況下不適用。

有沒有辦法用bash來做到這一點?也許以我沒有看到/理解的方式使用parallel

+0

'start_thing&PID = $ !;如果! init_thing;然後殺死「$ pid」; fi' – Leon

回答

0

陷阱ERR可能是有用的,其中pid變量包含進程的PID殺

trap 'kill $pid' ERR 

反射後它是更清楚明確地寫

init_thing || { 
    echo "something goes wrong, killing $pid" 
    kill "$pid" 
} 
相關問題