我的 ksh 版本是 ksh93-
=>rpm -qa | grep ksh
ksh-20100621-3.fc13.i686
我有一个简单的脚本,如下所示 - #cat test_sigterm.sh -
#!/bin/ksh
trap 'echo "removing"' QUIT
while read line
do
sleep 20
done
我正在从终端 1 - 1 执行脚本。ksh 从 /bin/ksh 启动,如下所示:
# exec /bin/ksh
2. The script is executed from this ksh-
# ./test_sigterm.sh&
[1] 12136
并从终端 2 发送“SIGTERM”-
# ps -elf | grep ksh
4 S root 12136 30437 0 84 4 - 1345 poll_s 13:09 pts/0 00:00:00 /bin/ksh ./test_sigterm.sh
0 S root 18952 18643 0 80 0 - 1076 pipe_w 13:12 pts/5 00:00:00 grep ksh
4 S root 30437 30329 0 80 0 - 1368 poll_s 10:04 pts/0 00:00:00 /bin/ksh
# kill -15 12136
我可以看到我的 test_sigterm.sh 在任何一种情况下都会在收到“SIGTERM”时被杀死,当在后台(&)和前台运行时。但是 ksh 手册页说 - 信号。如果命令后跟 & 并且监视器选项未激活,则调用命令的 INT 和 QUIT 信号将被忽略。否则,信号具有由 shell 从其父级继承的值(但另请参阅下面的 trap 内置命令)。
不忽略 SIGTERM 是 ksh 的已知行为还是默认行为?还是 ksh 子 SIGTERM 信号处理有问题?