ksh子进程不忽略SIGTERM

时间:2013-06-27 07:56:38

标签: linux ksh

我的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

并发送" SIGTERM"从2号航站楼 -

# 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手册页说 - 信号。        如果命令后跟&amp ;,则忽略调用命令的INT和QUIT信号。并且监视器选项未激活。        否则,信号具有shell从其父级继承的值(但另请参阅下面的陷阱内置命令)。

对于NOT IGNORE SIGTERM,它是ksh的已知或默认行为吗?或者是ksh子SIGTERM信号处理的问题?

1 个答案:

答案 0 :(得分:0)

我认为这是正常行为。

虽然它表示信号通常由后台进程继承,但是 TERM信号的动作由壳是否是交互式确定。 (请参阅调用下的ksh手册页中的'-i'选项。)

如果您需要脚本忽略SIGTERM,那么您可以将此行添加到其中:

trap '' TERM