0

並列の子プロセスを起動する Bash スクリプトを作成したいと考えています。子スクリプトが親プロセスに送信されるシグナルを受信できるようにする方法はありますか?

子プロセスを起動する方法は大まかに次のとおりですが、これは私のシグナリング基準を満たしていません。

for (( i=0; i<9; i++ ))
   {
   { echo $i start ; sleep 5s ; echo $i complete ; } &
   }
wait

これは ( を使用する) C プログラムで自動的に機能するため、シグナル転送fork/execを使用しなくても可能であると私は信じています。trap

これに対する 1 つの回避策は、 を使用することGNU-parallelです。xargsそのメカニズムが何であるかはわかりませんが、ループをスタイル構文 に再構築する意思がある限り、この問題は解決します。オプションを使用しても問題は解決GNU-parallelしません。--semaphore

答えはここにあると思いますが、それを Bash: Signal sent to both child and parent processに変換する方法がわかりません。

4

1 に答える 1

1

xargs スタイルではなく、GNU Parallel を使用しても問題ないように思えます。

関数を使っても大丈夫ですか?

doit() {
    # Trap 2 signals to show they are being given to the function
    trap 'echo you hit Ctrl-C/Ctrl-\, now exiting..; exit' SIGINT SIGQUIT
    echo $1 start
    sleep 5s
    echo $1 complete
}
export -f doit
seq 10 | parallel -u doit

またはパイプを避けるために:

parallel -u doit ::: {1..10}
于 2013-07-07T14:10:10.273 に答える