Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Trapping CHLD signal - ZSH works but ksh/bash/sh don't?

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 ---------'
like image 795
Reza Toghraee Avatar asked Dec 28 '22 04:12

Reza Toghraee


1 Answers

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

set -m
like image 110
ephemient Avatar answered Jan 05 '23 19:01

ephemient