종료할 수 없는 프로세스가 5개 있으며 kill -9 $PID
실행 시 cat /proc/$PID/cmdline
현재 세션이 중단됩니다 . 어쩌면 좀비 프로세스일 수도 있습니다.
실행하면 ps -ef or htop
현재 세션도 일시 중단됩니다. 하지만 잘 top
작동 ps -e
합니다.
따라서 파일 시스템이 응답하지 않는 데 두 가지 문제가 있는 것 같습니다.
이는 가상 머신을 실행하는 프로덕션 머신이므로 재부팅할 수 없습니다.
다음 프로세스 ID는 작동하지 않습니다: 16181 16765 5985 7427 7547
이러한 프로세스의 상위 프로세스는 init입니다.
├─collectd(16765)─┬─{collectd}(16776)
│ ├─{collectd}(16777)
│ ├─{collectd}(16778)
│ ├─{collectd}(16779)
│ ├─{collectd}(16780)
│ └─{collectd}(16781)
├─collectd(28642)───{collectd}(28650)
├─collectd(29868)─┬─{collectd}(29873)
│ ├─{collectd}(29874)
│ ├─{collectd}(29875)
│ └─{collectd}(29876)
Qemu 프로세스 중 하나가 작동하지 않습니다
|-qemu-system-x86(16181)-+-{qemu-system-x86}(16232)
| |-{qemu-system-x86}(16238)
| |-{qemu-system-x86}(16803)
| |-{qemu-system-x86}(17990)
| |-{qemu-system-x86}(17991)
| |-{qemu-system-x86}(17992)
| |-{qemu-system-x86}(18062)
| |-{qemu-system-x86}(18066)
| |-{qemu-system-x86}(18072)
| |-{qemu-system-x86}(18073)
| |-{qemu-system-x86}(18074)
| |-{qemu-system-x86}(18078)
| |-{qemu-system-x86}(18079)
| |-{qemu-system-x86}(18086)
| |-{qemu-system-x86}(18088)
| |-{qemu-system-x86}(18092)
| |-{qemu-system-x86}(18107)
| |-{qemu-system-x86}(18108)
| |-{qemu-system-x86}(18111)
| |-{qemu-system-x86}(18113)
| |-{qemu-system-x86}(18114)
| |-{qemu-system-x86}(18119)
| |-{qemu-system-x86}(23147)
| `-{qemu-system-x86}(27051)
답변1
당신에겐 좀비가 없습니다. cat /proc/$PID/cmdline
좀비를 처리하는 데 아무런 문제가 없습니다. 만약에kill -9
프로그램을 죽이지 않을 것입니다, 이는 프로그램이 중단 없이 I/O 작업을 수행하고 있음을 의미합니다. 이는 일반적으로 다음 세 가지 중 하나를 나타냅니다.
- 네트워크 파일 시스템이 응답하지 않습니다.
- 커널 오류;
- 하드웨어 오류입니다.
ps
위에서 언급한 이유 중 하나로 인해 커널이 제공하지 않는 프로세스 실행 경로와 같은 특정 정보를 읽으려고 하면 유틸리티가 중단될 수 있습니다.
노력하다cat /proc/16181/syscall
16181이 어떤 프로세스를 수행하고 있는지 확인하세요. 시스템 실행 방식에 따라 작동할 수도 있고 작동하지 않을 수도 있습니다.
문제가 네트워크 파일 시스템인 경우 강제로 마운트하거나 온라인으로 전환할 수 있습니다. 문제가 커널 또는 하드웨어 오류인 경우 취할 수 있는 단계는 오류의 성격에 따라 다릅니다. 재부팅(고정된 커널로 업그레이드 또는 손상된 하드웨어 교체)을 적극 권장합니다.
답변2
다른 답변에서는 이것이 좀비 프로세스라고 가정합니다. 좀비 프로세스는 실행이 완료되었지만 상위 프로세스가 종료 상태를 알고 싶어하는 경우를 대비해 여전히 프로세스 테이블에 남아 있는 프로세스입니다. 이는 정상적인 현상이며 init
할당된 좀비 프로세스를 자동으로 정리합니다.
좀비 프로세스는 중단을 일으키지 않으므로 이것이 문제가 아닌 것처럼 들립니다. 시스템 호출 또는 드라이버 정지인 경우 프로세스는 중단할 수 없는 상태일 수 있습니다. 설명이 잘 되어있어요여기.
답변3
Linux에서 좀비 프로세스를 찾으려면:
$ ps axo stat,ppid,pid,comm grep -w 유효하지 않음 |
Z 555 10242 빌어먹을 좀비 <더 이상 존재하지 않음>
먼저, kill 명령을 사용하여 좀비 프로세스의 상위 프로세스에 SIGCHLD 신호를 보낼 수 있습니다. 위 명령은 각 좀비 프로세스의 PPID(상위 프로세스의 PID)를 제공합니다. 이 예에서 좀비의 PPID는 입니다 555
.
$ sudo Kill -s SIGCHLD 555
좀비 프로세스가 여전히 사라지지 않으면 좀비 프로세스의 상위 프로세스(예: 555)를 종료할 수 있습니다.
$ sudo kill -9 555
부모 프로세스가 종료되면 좀비 프로세스는 Linux의 모든 프로세스의 부모 프로세스인 init 프로세스에 의해 채택됩니다. init 프로세스는 wait()
좀비 프로세스를 선택하기 위해 주기적으로 호출됩니다.
답변4
좀비의 부모를 죽여야만 좀비를 죽일 수 있습니다. 좀비 프로세스는 모든 리소스를 해제했으며 상위 프로세스가 종료 상태를 얻기를 기다리고 있습니다. 부모 프로세스가 wait
자식 프로세스의 종료 상태를 얻기 위해 실행하지 않으면 좀비가 됩니다. 좀비의 부모를 죽이면 init
종료 상태가 되고 좀비는 결국 죽게 됩니다.