gpt4 book ai didi

signals - SIGTERM 无法杀死进程

转载 作者:行者123 更新时间:2023-12-03 17:52:23 26 4
gpt4 key购买 nike

我有一个单线程进程,它不会因 kill -TERM 而死亡。过程
信号掩码不显示 SIGTERM 被阻止。我正在执行“杀死”
根。我可以使用 SIGKILL 终止进程,但这是更大范围的一部分
系统,我希望 SIGTERM 工作。

$ cat /proc/5105/status
Name: task_root.nginx
State: S (sleeping)
Tgid: 5105
Pid: 5105
PPid: 1
TracerPid: 0
Uid: 1000 1000 1000 1000
Gid: 1000 1000 1000 1000
FDSize: 256
Groups: 4 24 27 30 46 109 124 1000
VmPeak: 3304480 kB
VmSize: 3304472 kB
VmLck: 0 kB
VmPin: 0 kB
VmHWM: 249060 kB
VmRSS: 320 kB
VmData: 3228468 kB
VmStk: 1012 kB
VmExe: 3020 kB
VmLib: 30232 kB
VmPTE: 1076 kB
VmSwap: 248288 kB
Threads: 1
SigQ: 0/63014
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000004
SigIgn: 0000000000000000
SigCgt: 2000000181001cef
CapInh: 0000000000000000
CapPrm: 0000000000200000
CapEff: 0000000000200000
CapBnd: ffffffffffffffff
Cpus_allowed: ff
Cpus_allowed_list: 0-7
Mems_allowed: 00000000,00000001
Mems_allowed_list: 0
voluntary_ctxt_switches: 16
nonvoluntary_ctxt_switches: 1

请注意 Sig* 属性。 SigCgt、SigIgn 和 SigBlk 表示 SIGTERM 未被捕获、忽略或阻止(位 #15 未设置 - 将最低有效位计为 #1)。由于 SIGTERM 的默认处理是终止进程,我希望它会被杀死。但这不会发生——
$ sudo kill -TERM 5105

$ cat /proc/5105/status | grep Name
Name: task_root.nginx

该进程在 wait() 系统调用中被阻塞,等待子进程的终止:
$ sudo cat /proc/5105/stack
[<ffffffff8106bfc4>] do_wait+0x1e4/0x260
[<ffffffff8106d230>] sys_wait4+0xa0/0xf0
[<ffffffff81668d02>] system_call_fastpath+0x16/0x1b
[<ffffffffffffffff>] 0xffffffffffffffff

该进程是使用带有标志 SIGCHLD |的 clone() 创建的单线程进程。 CLONE_NEWPID | CLONE_NEWNS。从父(默认)PID 命名空间来看,PID 5105 是顶级 PID。

使用 SIGKILL 杀死进程表明 PID 或进程跟踪不是问题。

最佳答案

您确定 SIGTERM 是您系统上的信号 15 吗?您没有在问题中指定操作系统或架构,但很可能您可以使用“kill -l”来列出信号(这是一个小写字母 L,而不是数字)。如果你跟踪进程,然后杀死 -TERM 它会发生什么?例如:

strace -Tttf -o strace.out -p 5105 &
kill -TERM 5105

信号掩码是否在改变? strace 还应显示是否发生这种情况。

关于signals - SIGTERM 无法杀死进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18048822/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com