4

これは、シェルスクリプトがバックグラウンドでいくつかのジョブを起動し、CHLD信号を受信すると(つまり、子プロセスの終了)、いくつかのアクションを実行するサンプルコードです...問題は、親シェルスクリプトがZSHスクリプトである場合、それはうまく機能し、CHLD信号をトラップしますが、他のシェルはそうではありません!何故ですか?

#! /bin/zsh -

function foo() { echo "Trapped CHLD signal!" 
}   

trap 'foo' CHLD

./child-work1.sh &
./child-work2.sh &
./child-work3.sh &

echo 'waiting for the children'
wait
echo '--------- done ---------'
4

1 に答える 1

10

Bashは、対話型の場合にジョブ制御を自動的に有効にしますが、スクリプトでは、明示的にオンにする必要があります。

set -m
于 2012-03-14T02:14:21.063 に答える