2013-08-04 3 views
1

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 또는 프로세스 추적이 문제가되지 않는다는 것을 보여줍니다.

+0

사용자 영역 백 트레이스를보기 위해 strace 또는 gdb로 연결하려고 했습니까? – OznOg

답변

0

SIGTERM은 (는) 시스템에서 신호 15입니까? 질문에 OS 또는 아키텍처를 지정하지 않았지만 "kill -l"을 사용하여 신호를 나열 할 수 있습니다 (숫자 1이 아닌 소문자 L). 프로세스를 스트레칭하고 -term을 죽이면 어떻게됩니까? 예 :

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

신호 마스크가 변경 되었습니까? strace는 또한 이것이 일어나고 있는지 보여 주어야한다.