백틱 yes 프로세스를 어떻게 종료할 수 있나요?

백틱 yes 프로세스를 어떻게 종료할 수 있나요?

나는 터미널에서 그것을 가지고 놀고 있으며 zsh다음을 입력했습니다.

$ `
bquote> yes
bquote> `

그러다가 yes백그라운드에서 실행되기 시작했다고 생각했습니다. Ctrl+ CCtrl+ 도 \프로세스를 종료할 수 없습니다. 터미널을 닫았지만 프로세스가 계속되는 것 같습니다. 제가 말할 수 있는 것은 팬이 여전히 작동하는지 확인할 수 있다는 것뿐입니다.

다음 명령을 실행했지만 그 중 하나도 작동하지 않았습니다.

  • 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 -9zsh 프로세스와 죽은 프로세스가 yes사라집니다.

htop프로세스 소유권 계층 구조를 더 잘 파악하려면 보기를 사용하세요 (플랫/계층 구조 전환 보기 사용 t).

답변2

그 이후 killall -9 yes, 또는 그 이후에도 프로세스는 종료됩니다 killall yes. 상태의 프로세스가 yes명령어 이름 뒤에 표시되면 이는 프로세스가 아니라 좀비 프로세스입니다.psZ<defunct>좀비는 죽었다더 이상 그들을 죽일 수 없습니다.

여기서 일어나는 일은 yes프로세스가 종료되었다는 것입니다. 더 이상 입력이 생성되지 않습니다. 그러나 명령 대체를 수행하는 쉘 프로세스는 많은 양의 데이터를 읽고 이에 대한 메모리 할당에 매우 바쁘다(그리고 많은 양의 데이터를 매우 효율적으로 처리하지 못할 수도 있음).

(Linux 구문)을 실행하여 ps -C yes l상위 프로세스를 확인합니다 yes. 당신이 죽여야 할 사람은 바로 이 사람입니다. 이를 알아내는 또 다른 방법은 top이 출력에서 ​​CPU 시간의 98.9%를 차지하고 있다는 것입니다.

관련 정보