捕获CHLD信号 - ZSH可以但ksh/bash/sh不行?

4
这里是一个示例代码,其中一个 shell 脚本启动了一些后台任务,并在收到 CHLD 信号(即子进程终止)时采取一些操作...问题在于,如果父 shell 脚本是 ZSH,则可以正常工作并捕获 CHLD 信号,但其他 shell 却不行!为什么会这样?
#! /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 ---------'

退出代码/信号是foo()的第一个参数吗?你是指“退出代码”而不是“信号”吗? - Alexander Mills
1个回答

12

Bash在交互模式下会自动启用作业控制(job control),但在脚本中必须显式地打开它。

set -m

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接