0

假设我在 shell 脚本中并行运行两个命令,示例如下

/cmd1 &  
pid1=$!

/cmd2 &  
pid2=$!

status1=    # what should go here?

status2=$?  # I know this will have status of previous background process only

只有当两个命令都具有干净的退出状态时,我才想继续如何检查第一个后台进程的状态。

4

2 回答 2

0

这位先生怎么样

monitor ()
{
  if ! $*
  then
    > error
  fi
}

clean()
{
  rm -f error
}

clean
monitor cmd1 &
monitor cmd2

if [ -a error ]
then
  echo error encountered
  exit
fi
于 2013-01-24T07:44:22.230 回答
0

一种解决方案是将 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

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

学到更多

于 2013-01-29T09:32:31.897 回答