나는 터미널에서 그것을 가지고 놀고 있으며 zsh
다음을 입력했습니다.
$ `
bquote> yes
bquote> `
그러다가 yes
백그라운드에서 실행되기 시작했다고 생각했습니다. Ctrl+ C나 Ctrl+ 도 \프로세스를 종료할 수 없습니다. 터미널을 닫았지만 프로세스가 계속되는 것 같습니다. 제가 말할 수 있는 것은 팬이 여전히 작동하는지 확인할 수 있다는 것뿐입니다.
다음 명령을 실행했지만 그 중 하나도 작동하지 않았습니다.
pkill yes
pkill yes\ \<defunct\>
(completion을 사용할 때 발생 Tab)killall -9 yes
pkill zsh
killall -9 zsh
큰 파일이 다른 컴퓨터에 복사되고 있고 프로세스를 다시 시작하고 싶지 않기 때문에 컴퓨터를 다시 시작할 수 없습니다.
이것은 내 top
결과입니다.
top - 16:06:16 up 7:41, 3 users, load average: 1,49, 1,33, 1,02
Tasks: 305 total, 3 running, 301 sleeping, 0 stopped, 1 zombie
%Cpu(s): 53,8 us, 2,5 sy, 0,0 ni, 43,5 id, 0,0 wa, 0,0 hi, 0,2 si, 0,0 st
KiB Mem: 6009896 total, 5897432 used, 112464 free, 17152 buffers
KiB Swap: 7811068 total, 280 used, 7810788 free. 2225944 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
24814 john 20 0 2367448 2,219g 3896 R 98,9 38,7 12:29.00 zsh
2134 john 20 0 1576256 117104 69868 S 2,7 1,9 2:44.03 compiz
1163 root 20 0 311032 66020 25016 S 2,3 1,1 9:28.03 Xorg
25428 john 20 0 30220 3800 3008 S 2,0 0,1 0:08.48 htop
408 root -51 0 0 0 0 S 1,3 0,0 4:25.59 irq/32-iwl+
25359 john 20 0 581928 31888 25080 S 1,3 0,5 0:00.92 gnome-term+
2051 john 20 0 653056 32296 23640 S 1,0 0,5 0:05.72 unity-pane+
25479 john 20 0 29276 3164 2544 R 0,7 0,1 0:00.04 top
819 message+ 20 0 40748 4044 2372 S 0,3 0,1 0:04.27 dbus-daemon
1995 john 20 0 363388 10984 5828 S 0,3 0,2 0:20.36 ibus-daemon
2049 john 20 0 39252 3544 3016 S 0,3 0,1 0:00.27 dbus-daemon
2103 john 20 0 205408 6516 5936 S 0,3 0,1 0:05.65 ibus-engin+
2157 john 20 0 551436 10652 8376 S 0,3 0,2 0:01.35 indicator-+
24009 nobody 20 0 275852 14904 12260 S 0,3 0,2 0:23.73 smbd
24536 root 20 0 0 0 0 S 0,3 0,0 0:00.33 kworker/u8+
1 root 20 0 33888 4452 2720 S 0,0 0,1 0:01.67 init
2 root 20 0 0 0 0 S 0,0 0,0 0:00.00 kthreadd
이것은 내 ps aux | grep yes
결과입니다.
$ ps aux | grep yes
john 25004 0.1 0.0 0 0 ? Z 15:53 0:01 [yes] <defunct>
john 25603 0.0 0.0 15976 2220 pts/25 S+ 16:13 0:00 grep --color=auto yes
답변1
이 답변stackoverflow에 대한 Bill Karwin의 기사가 바로 여러분이 찾고 있는 내용입니다.
프로세스를 종료했지만 상위 프로세스가 "수확"이라는 작업을 수행할 때까지(본질적으로 프로세스가 종료 상태를 읽을 수 있도록 wait(3)를 호출함) 죽은 프로세스는 프로세스 테이블에서 사라지지 않습니다. 아직 재활용되지 않은 죽은 프로세스를 "좀비 프로세스"라고 합니다.
표시되는 상위 프로세스 ID 31756은 항상 init에 속하는 프로세스 ID 1입니다. 프로세스는 주기적으로 좀비를 획득해야 하지만 그렇지 않은 경우 재부팅할 때까지 프로세스 테이블에 좀비로 남아 있습니다.
이 예외를 제외하고 상위 프로세스는 zsh입니다. kill -9
zsh 프로세스와 죽은 프로세스가 yes
사라집니다.
htop
프로세스 소유권 계층 구조를 더 잘 파악하려면 보기를 사용하세요 (플랫/계층 구조 전환 보기 사용 t).
답변2
그 이후 killall -9 yes
, 또는 그 이후에도 프로세스는 종료됩니다 killall yes
. 상태의 프로세스가 yes
명령어 이름 뒤에 표시되면 이는 프로세스가 아니라 좀비 프로세스입니다.ps
Z
<defunct>
좀비는 죽었다더 이상 그들을 죽일 수 없습니다.
여기서 일어나는 일은 yes
프로세스가 종료되었다는 것입니다. 더 이상 입력이 생성되지 않습니다. 그러나 명령 대체를 수행하는 쉘 프로세스는 많은 양의 데이터를 읽고 이에 대한 메모리 할당에 매우 바쁘다(그리고 많은 양의 데이터를 매우 효율적으로 처리하지 못할 수도 있음).
(Linux 구문)을 실행하여 ps -C yes l
상위 프로세스를 확인합니다 yes
. 당신이 죽여야 할 사람은 바로 이 사람입니다. 이를 알아내는 또 다른 방법은 top
이 출력에서 CPU 시간의 98.9%를 차지하고 있다는 것입니다.