一尘不染

在Linux上对进程执行kill -9怎么可能没有效果?

linux

我正在编写一个插件,以在您访问网站时自动突出显示文本字符串。就像高亮显示的搜索结果一样,但是自动且包含很多单词;它可以用于有过敏症的人,使单词真正脱颖而出,例如,当他们浏览美食网站时。

但是我有问题。当我尝试关闭一个空的,新鲜的FF窗口时,它以某种方式阻碍了整个过程。当我终止该进程时,所有窗口都消失了,但是Firefox进程仍然存在(父PID为1,不侦听任何信号,打开了很多资源,仍然吃着CPU,但不会花钱)。

有两个问题:

  1. 进程甚至怎么可能都不听kill -9(既不是用户身份也不是root用户)?

  2. 除了重启,我能做些什么?

[编辑]这是令人讨厌的过程:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
digulla  16688  4.3  4.2 784476 345464 pts/14  D    Mar28  75:02 /opt/firefox-3.0/firefox-bin

与…相同 ps -ef | grep firefox

UID        PID  PPID  C STIME TTY          TIME CMD
digulla  16688     1  4 Mar28 pts/14   01:15:02 /opt/firefox-3.0/firefox-bin

这是剩下的唯一过程。如您所见,它不是僵尸,它正在运行!无论我是按PID还是按名称杀死它,它都不会监听kill
-9!如果我尝试与进行连接strace,则strace还会挂起并且无法杀死。也没有输出。我的猜测是FF挂在某些内核例程中,但是哪一个呢?

[EDIT2]根据sigjuice的反馈:

ps axopid,comm,wchan

可以向您显示进程挂在哪个内核例程中。就我而言,令人讨厌的插件是Beagle Indexer(openSUSE
11.1)。禁用该插件后,FF再次成为快速而快乐的狐狸。


阅读 511

收藏
2020-06-07

共1个答案

一尘不染

如对OP的注释中所述,进程状态(STATD表示该进程处于“不间断睡眠”状态。用现实世界的话来说,这通常意味着它正在等待I / O,在I /
O操作完成之前,它不会/不会做任何事情-包括死亡。

D通常情况下,处于某个状态的进程只有一秒钟的时间才能完成操作,然后返回R/
S。以我的经验,如果流程陷入困境D,通常是尝试与无法访问的NFS或其他远程文件系统进行通信,尝试访问发生故障的硬盘驱动器或通过易碎的设备驱动程序使用某些硬件。在这种情况下,恢复并使进程终止的唯一方法是使fs
/驱动器/硬件备份并运行,以便I / O可以完成,或者放弃并重新引导系统。在NFS的特定情况下,挂载最终可能还会超时并从I /
O操作返回(带有失败代码),但这取决于挂载选项,将NFS挂载设置为永久等待很常见。 。

这与僵尸进程不同,僵尸进程的状态为Z

2020-06-07