zsh
を実行しているターミナルで遊んでいました。次のように入力しました。
$ `
bquote> yes
bquote> `
そして、yes
がバックグラウンドで実行され始めたと思います。どちらでもない Ctrl + C また Ctrl + \ プロセスを殺すために働いた。ターミナルを閉じましたが、処理は続行されているようです。私が言えるのは、ファンがまだ機能していることを確認できるということだけです。
次のコマンドを実行しましたが、どちらも機能しません。
pkill yes
pkill yes\ \<defunct\>
(使用時に表示される 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
この回答 ビルカーウィンによるstackoverflowは、まさにあなたが探しているものです:
プロセスを強制終了しましたが、デッドプロセスは、その親プロセスが「リーピング」と呼ばれるタスクを実行するまで(基本的に、そのプロセスが終了ステータスを読み取るためにwait(3)を呼び出すまで)プロセステーブルから消えません。刈り取られていないデッドプロセスは「ゾンビプロセス」と呼ばれます。
31756に表示される親プロセスIDはプロセスID1であり、これは常にinitに属します。そのプロセスは定期的にゾンビプロセスを取得する必要がありますが、それができない場合は、再起動するまでプロセステーブルにゾンビが残ります。
この場合を除いて、親プロセスはzshです。 kill -9
zshプロセスと廃止されたyes
はなくなります。
htop
をチェックして、プロセスの所有権階層をよりよく把握します(フラット/階層ビューを t)。
killall -9 yes
の後、およびkillall yes
の後でも、yes
プロセスは停止しています。 ps
が状態Z
のプロセスを示し、<defunct>
がコマンド名の後にある場合、それはプロセスではなく、ゾンビです。 ゾンビは死んでいます そしてあなたはそれらをこれ以上殺すことはできません。
ここで起こっていることは、yes
プロセスが停止しているということです。これ以上の入力は生成されません。ただし、コマンド置換を実行しているシェルプロセスは、大量のデータを読み取り、メモリの割り当てに非常に忙しい(そして、おそらく大量のデータにあまり効率的に対処していない)。
ps -C yes l
(Linux構文)を実行して、yes
の親プロセスを確認します。それはあなたが殺す必要があるものです。それを見つける別の方法は、それがそのtop
出力で98.9%のCPU時間を費やしていることです。