击 - 杀死所有的并行处理,如果一个失败
问题描述:
我有我通过运行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
?
答
陷阱ERR可能是有用的,其中pid变量包含进程的PID杀
trap 'kill $pid' ERR
反射后它是更清楚明确地写
init_thing || {
echo "something goes wrong, killing $pid"
kill "$pid"
}
'start_thing&PID = $ !;如果! init_thing;然后杀死“$ pid”; fi' – Leon