linux - ksh 子进程不忽略 SIGTERM

标签 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

并从终端 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 内置命令)。

NOT IGNORE SIGTERM 是 ksh 的已知行为还是默认行为?还是 ksh 子 SIGTERM 信号处理有问题?

最佳答案

我认为这是正常行为。

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

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

trap '' TERM

关于linux - ksh 子进程不忽略 SIGTERM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17337690/

相关文章:

path - 如何避免在 ksh 中重复路径变量

linux - 为什么 ksh 在嵌套命令替换期间无法捕获标准错误?

linux - 不使用 sudo 将数据发送到 Linux tap 接口(interface)

unix - 无法在 korn 脚本中的每行末尾插入日期和主机名

unix - 解析一个字符串的 1000 个脚本的最佳方法?

使用反斜杠的 grep 问题

linux - linux 内核如何处理对/sys/power/state 的写入

linux - 为什么我无法在 sed 替换中转义单引号但使用\x27 有效?

Python将文件从Linux复制到WIndows

linux - 无法在 Linux 中生成 gpg key