当进程处于S状态时捕获kill信号

当进程处于S状态时捕获kill信号

这是进程组:( ps -ejH)

 xxxx  xxxx  xxxx ?        00:00:00   sshd
 yyyy  yyyy  yyyy ?        00:00:00     sshd
 8713  8713  8713 pts/0    00:00:00       bash

 1234  1234  1234 ?        00:00:00   Process 1
 5678  1234  1234 ?        00:00:00     openvt
 3789  3789  3789 tty4     00:00:00       Python process

进程的状态是:

Process1 : Ss [可中断睡眠和会话领导者]

openvt : S [可中断睡眠]

python进程:Ss+【可中断睡眠和会话领导者和前台运行进程】

我正在终端 /dev/pts0 [8713] bash 中工作。

当我发送时kill 1234,它单独杀死 process1 但不杀死它的子进程。所以,我在 Process1 中编写了一个函数,在退出之前杀死它的子进程。

当我使用 trap 调用此函数时:

trap function_name SIGTERM

并发送kill 1234or kill -15 1234or kill -s TERM 1234,陷阱函数不会捕获信号来调用我编写的函数。

再次,当我从 process1 中删除 trap 命令并调用 时kill 1234,它会杀死 procces1。

我认为当两者都在后台运行时,执行控制在 openvt 上而不是在 process1 上,并且因为 process1 没有收到此终止命令。

现在如何让process1接收kill命令呢?

PS:这里的openvt打开一个新的虚拟终端来运行python进程。用于执行此操作的命令是:openvt -f -s -c 4 -w python_process。 -w 等待命令完成。

注:来自Linux 杂志如果进程在可中断的睡眠状态(例如等待终端 I/O)时收到信号,内核将唤醒该进程来处理该信号。如果进程在不间断睡眠时收到信号(例如等待磁盘 I/O),则内核会将信号推迟到事件完成为止。

我发送给 process1 的 Kill 信号处于可中断睡眠状态 (S),但内核延迟了该信号.. 为什么?

有一个邮政基于此,但没有解决。

更新1:当我使用命令 pkill -TERM -p pid 杀死父进程的所有子进程时,并且当我调用kill pid 时,信号被 trap 命令捕获。

相关内容