0

以下の例のように、シェルスクリプトで2つのコマンドを並行して実行しているとします。

/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

1 つの解決策は、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 列は終了値を示します。また、ジョブの 1 つが失敗した場合、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 に答える
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 に答える