我怎样才能终止我的反引号 yes 进程?

我怎样才能终止我的反引号 yes 进程?

我正在我的终端上玩,它运行zsh.我输入了以下内容:

$ `
bquote> yes
bquote> `

然后,yes我想,开始在后台运行。Ctrl+CCtrl+都无法\杀死该进程。我关闭了终端,但该过程似乎仍在继续。我只能说我可以确认我的风扇仍然可以工作。

我运行了以下命令,但也不起作用:

  • 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 -9zsh 进程和失效的进程yes将消失。

查看htop以更好地掌握流程所有权层次结构(使用 切换平面/层次结构视图t)。

答案2

之后killall -9 yes,甚至之后killall yesyes进程就死了。当在命令名称后面ps显示处于状态的进程时,这不是进程,而是僵尸进程。Z<defunct>僵尸死了你不能再杀死他们了。

这里发生的事情是yes进程已经死了。它不再产生任何输入。然而,执行命令替换的 shell 进程已读取大量数据,并且非常忙于为其分配内存(并且可能无法非常有效地处理大量数据)。

运行ps -C yes l(Linux语法)查看 的父进程yes。这就是你需要杀死的人。另一种发现它的方法是,它在该top输出中占用了 98.9% 的 CPU 时间。

相关内容