假设我在 shell 脚本中并行运行两个命令,示例如下
/cmd1 &
pid1=$!
/cmd2 &
pid2=$!
status1= # what should go here?
status2=$? # I know this will have status of previous background process only
只有当两个命令都具有干净的退出状态时,我才想继续如何检查第一个后台进程的状态。
假设我在 shell 脚本中并行运行两个命令,示例如下
/cmd1 &
pid1=$!
/cmd2 &
pid2=$!
status1= # what should go here?
status2=$? # I know this will have status of previous background process only
只有当两个命令都具有干净的退出状态时,我才想继续如何检查第一个后台进程的状态。
这位先生怎么样
monitor ()
{
if ! $*
then
> error
fi
}
clean()
{
rm -f error
}
clean
monitor cmd1 &
monitor cmd2
if [ -a error ]
then
echo error encountered
exit
fi
一种解决方案是将 GNU Parallel 与 --joblog 一起使用,这里显示了 2 个命令exit 0
和exit 1
:
(echo exit 0; echo exit 1) | parallel --joblog /tmp/foo
cat /tmp/foo
Seq Host Starttime Runtime Send Receive Exitval Signal Command
1 : 1359451838.09 0.002 0 0 0 0 true
2 : 1359451838.093 0.002 0 0 1 0 false
Exitval 列将给出退出值。如果其中一项作业失败,GNU Parallel 也将返回非零值:
(echo exit 0; echo exit 1) | parallel && echo Do this if none fail
或同等学历:
parallel ::: "exit 0" "exit 1" && echo Do this if none fail