2017-08-29 35 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" 
} 
相关问题