【问题标题】:ksh child process not ignoring SIGTERMksh子进程不忽略SIGTERM
【发布时间】:2013-06-24 15:10:27
【问题描述】:

我的 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 信号处理有问题?

【问题讨论】:

    标签: linux ksh


    【解决方案1】:

    我认为这是正常行为。

    虽然它说信号通常由后台进程继承,但 TERM 信号的作用取决于 shell 是否是交互式的。 (请参阅 Invocation 下 ksh 手册页中的“-i”选项。)

    如果您需要脚本忽略 SIGTERM,那么您可以在其中添加这一行:

    trap '' TERM
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-05
      • 2011-03-17
      • 1970-01-01
      • 2017-10-25
      • 2012-10-08
      • 1970-01-01
      • 2016-04-03
      • 2017-06-15
      相关资源
      最近更新 更多