Trapping CHLD signal - ZSH works but ksh/bash/sh d

2019-05-04 15:30发布

Here's a sample code where a shell script launches a few jobs in the background and upon receiving the CHLD signal (i.e. the child process termination) it will take some actions... The problem is that if the parent shell script is a ZSH one, it works just fine and traps the CHLD signals, but other shells do not! why is that?

#! /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 ---------'

1条回答
来,给爷笑一个
2楼-- · 2019-05-04 16:22

Bash automatically enables job control when interactive, but in scripts you must turn it on explicitly.

set -m
查看更多
登录 后发表回答