我正在我的终端上玩,它运行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
答案1
这个答案Bill Karwin 在 stackoverflow 上的文章正是您所寻找的:
您已经杀死了该进程,但死进程不会从进程表中消失,直到其父进程执行名为“收割”的任务(实质上为该进程调用 wait(3) 来读取其退出状态)。尚未被回收的死亡进程称为“僵尸进程”。
您看到的 31756 的父进程 ID 是进程 ID 1,它始终属于 init。该进程应该定期获取其僵尸进程,但如果不能,它们将在进程表中保留僵尸进程,直到您重新启动。
除本例外,父进程都是 zsh。 kill -9
zsh 进程和失效的进程yes
将消失。
查看htop
以更好地掌握流程所有权层次结构(使用 切换平面/层次结构视图t)。
答案2
之后killall -9 yes
,甚至之后killall yes
,yes
进程就死了。当在命令名称后面ps
显示处于状态的进程时,这不是进程,而是僵尸进程。Z
<defunct>
僵尸死了你不能再杀死他们了。
这里发生的事情是yes
进程已经死了。它不再产生任何输入。然而,执行命令替换的 shell 进程已读取大量数据,并且非常忙于为其分配内存(并且可能无法非常有效地处理大量数据)。
运行ps -C yes l
(Linux语法)查看 的父进程yes
。这就是你需要杀死的人。另一种发现它的方法是,它在该top
输出中占用了 98.9% 的 CPU 时间。