10

私がbash関数を持っているとしましょう

Yadda() {
  # time-consuming processes that must take place sequentially
  # the result will be appended >> $OUTFILE
  # $OUTFILE is set by the main body of the script
  # No manipulation of variables in the main body
  # Only local-ly defined variables are manipulated
}

サブシェルでバックグラウンドジョブとして関数を呼び出すことはできますか?例えば:

OUTFILE=~/result
for PARM in $PARAMLIST; do
  ( Yadda $PARM ) &
done
wait
cat $OUTFILE

どう思いますか?

4

1 に答える 1

10

サブシェルでバックグラウンドジョブとして関数を呼び出すことができます。例で入力したのと同じように機能します。

例で示した方法に1つの問題があります。一部のプロセスが同時に終了すると、それらは同時にOUTFILEに書き込もうとし、出力が混同される可能性があります。

各プロセスに独自のファイルへの書き込みを許可し、すべてのプロセスが完了した後にファイルを収集することをお勧めします。

于 2011-05-08T09:32:03.183 に答える