kill -TERM에서 죽지 않는 단일 스레드 프로세스가 있습니다. 시그널 마스크는 SIGTERM이 차단되었음을 보여주지 않습니다. 나는 'kill'을 루트로 실행 중입니다. SIGKILL을 사용하여 프로세스를 종료 할 수 있지만 이것은 더 큰 시스템의 일부이며 작동하도록 SIGTERM을 원합니다.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
과정은 하위 프로세스의 종료를 기다리고, 대기() 시스템 호출에서 차단됩니다 :
$ sudo cat /proc/5105/stack
[<ffffffff8106bfc4>] do_wait+0x1e4/0x260
[<ffffffff8106d230>] sys_wait4+0xa0/0xf0
[<ffffffff81668d02>] system_call_fastpath+0x16/0x1b
[<ffffffffffffffff>] 0xffffffffffffffff
과정이었다 단일 스레드 프로세스입니다 clone()과 플래그 SIGCHLD를 사용하여 생성 | CLONE_NEWPID | CLONE_NEWNS. PID (5105)는 부모 (디폴트) PID 네임 스페이스로부터 보여지는 최상위 PID이다.
SIGKILL로 프로세스를 강제 종료하면 PID 또는 프로세스 추적이 문제가되지 않는다는 것을 보여줍니다.
사용자 영역 백 트레이스를보기 위해 strace 또는 gdb로 연결하려고 했습니까? – OznOg