Bash - 如果一个失败,则杀死所有并行进程

时间:2017-08-29 11:03:32

标签: bash

我通过以下两个流程运行:

init_thing & start_thing

init_thing轮询start_thing的日志,查看它认为显示start_thing已成功开始的特定行,然后对其执行一些命令(例如添加用户)。< / p>

如果init_thing函数认为start_thing已超时,则start_thing函数可能会失败并返回非零退出代码。 start_thing函数可能会失败,但如果成功则会永远运行。

如果init_thing失败,我想要做的就是杀死parallel

我已经在很多答案中看到了GNU parallel的使用,但它似乎依赖于两个进程完成(即以零退出代码退出),在我的情况下并没有&#39 ;适用。

有没有办法用bash做到这一点?也许以我尚未看到/理解的方式使用CREATE TABLE IF NOT EXISTS user ( id text, login text, password text, firstName text, lastName text, gender text, mobileNo text, aadhar text, email text, stateCode text, district text, city text, zipCode int, address text, PRIMARY KEY(id) );

1 个答案:

答案 0 :(得分:0)

陷阱ERR可能很有用,其中pid变量包含要杀死的进程的pid

trap 'kill $pid' ERR
在反思之后,明确写出更清楚

init_thing || {
    echo "something goes wrong, killing $pid"
    kill "$pid"
}