kill -9에 응답하지 않는 프로세스를 종료하는 방법


9

SLES 10.1을 실행하는 SGI Altix 450의 프로세스가 실행을 중지 한 것 같습니다 (즉, 몇 시간 동안 로그에 추가 출력을 제공하지 않음). 이 시점에서 문제가있는 프로세스를 종료하고 다시 시작할 수 있습니다. 상단은 프로세스가 (R) 상태임을 나타냅니다. 내가 죽이려고해도 아무 일도 일어나지 않습니다. kill -9를 사용해도 여전히 남아 있습니다. 이 경우 컴퓨터를 다시 시작하는 것 외에 무엇을 할 수 있습니까?


2
그들은 분명히 동일한 프로세스 ID입니까? 프로세스를 종료하고 일부 데몬이 동일한 이름의 프로세스를 다시 시작한다는 것이 아닙니다.
CK.

답변:


9

프로세스가 종료되었지만 부모가 반환 값을 수집하기를 기다리는 중일 수 있습니다. 이 경우 종료 된 후 'R'이 아닌 'Z'상태에있게됩니다. 이 경우 명령을 ppid사용하여 프로세스를 찾고 ps상위 프로세스도 종료해야합니다 (실제로 문제가 발생하지 않는 경우).

다른 경우는 어떤 이유로 프로세스가 tty와 같이 종료 된 후 다시 시작되는 것일 수 있습니다. 이 경우 프로세스 ID는 kill -9를 수행 할 때마다 변경되어야합니다. 프로세스 ID를 종료하려고 할 때마다 프로세스 ID가 변경되는지 확인하십시오.


부모 프로세스를 죽이려고한다고 생각합니다. (R) 상태에있는 상위 프로세스입니다. pstree가이를 확인합니다. 자식 프로세스는 모두 (Z) 좀비 상태에 있습니다. ppid는 정적으로 유지되므로 단순히 다시 시작한다고 생각하지 않습니다.
Jared Brown

부모 프로세스 (및 부모 프로세스 등)를 종료하면 init는 'Z'상태에있는 자식 프로세스의 부모가되어 반환 값을 수집합니다. 따라서 부모가 반환 값을 취하지 않는 'Z'자식을 제거하는 가장 좋은 방법은 부모를 죽여서 init이 죽은 자식 프로세스의 부모가되도록하는 것입니다.
Saurabh Barjatiya

이것이 내가 겪고있는 문제입니다. kill을 통해 -9 신호를 상위 프로세스로 전송해도 종료되지 않습니다.
Jared Brown

1
SIGHUP을 부모에게 보내는 것만으로도 충분합니다. 부모를 항상 죽일 필요는 없습니다.
Thomas

2
죄송합니다. SIGCHLD. (아침 일찍 너무)
토마스

2

프로세스가 NFS 같은 시스템 리소스를 기다리고 있습니까? 그것은 '가자'는 것을 허용하지 않습니다. 내 것을 넘어서 이것에 대한 해결책을 듣고 싶습니다 ...

상자를 재부팅하거나 프로세스를 그대로 두십시오.

kill -STOP {PID}를 통해 프로세스를 '중지'하여 더 많은 CPU를 사용하지 못하게 할 수 있을지 궁금합니다.

다시 시작하면 프로세스가 중지 된 다른 상태에서도 가능해야하지만 다른 프로세스에서 여전히 사용중인 목록 포트 또는 공유 메모리 세그먼트가 필요할 수 있습니다.


1
NFS 또는 일부 I / O 기능이 완료되기를 기다리는 프로세스가 (D) 상태가 아닙니까? 이러한 프로세스는 (R) 상태입니다.
Jared Brown

이것은 내가 lss3fs 마운트 에서 명령을 수행 할 때 때때로 일어나는 일 입니다. 이 ls과정은 kill -9내가 마운트를 해제 할 때까지 종료 되지 않습니다.umount -l
Marco Marsala

0

아직 dmesg를 확인 했습니까? 나는 커널 패닉 후에 이것을 보았다; 복구 할 수있는 유일한 방법은 재부팅 (바람직하게는 빨리)하는 것입니다. 패치 된 커널을 얻는 것입니다.

일반적으로 처리 할 수없는 프로세스는 R이 아닌 D 상태입니다.


재부팅 이외의 D 상태 다이 하드 프로세스에 대해 수행 할 수있는 작업이 있습니까? ppid = 1
교수 Moriarty
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.