检查 shell 脚本中两个并行运行的后台命令的退出状态



>假设我在 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 0exit 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
退出值列

将给出退出值。此外,如果其中一个作业失败,GNU 并行将返回非零:

(echo exit 0; echo exit 1) | parallel && echo Do this if none fail

或同等学历:

parallel ::: "exit 0" "exit 1" && echo Do this if none fail

了解更多信息

相关内容

  • 没有找到相关文章

最新更新