我正在编写一个插件,在你访问网站时自动突出显示文本字符串.它就像突出显示的搜索结果一样,但对于许多单词来说是自动的;它可以用于过敏患者,使单词真正脱颖而出,例如,当他们浏览食品网站时.

但我有问题.当我试图关闭一个空的、新的FF窗口时,它会以某种方式阻止整个过程.当我关闭进程时,所有的窗口都消失了,但Firefox进程保持活动状态(父PID为1,不监听任何信号,有大量资源打开,仍然占用CPU,但不会移动).

所以有两个问题:

  1. 一个进程怎么可能不监听kill-9(既不是用户也不是根用户)?

  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

这是唯一剩下的过程.正如你所见,它不是僵尸,而是在奔跑!它不听kill-9,不管我是用PID还是名字杀人!如果我try 连接strace,那么strace也会挂起,不会被杀死.也没有输出.我猜FF挂在某个内核 routine 中,但哪个呢?

[EDIT2]根据sigjuice的反馈:

ps axopid,comm,wchan

可以显示进程挂起的内核 routine .在我的例子中,有问题的插件是Beagle Indexer(openSUSE 11.1).禁用插件后,FF又成了一只快活快乐的狐狸.

推荐答案

如对OP的 comments 中所述,D的进程状态(STAT)表示该进程处于"不间断睡眠"状态.在现实世界中,这通常意味着它正在等待I/O,在I/O操作完成之前,它不能/不会做任何事情,包括死亡.

处于D状态的进程通常只会在操作完成前的一小部分秒出现,然后返回到R/S.根据我的经验,如果一个进程陷入D,它通常会试图与无法访问的NFS或其他远程文件系统通信,试图访问出现故障的硬盘驱动器,或者通过一个不稳定的设备驱动程序使用某些硬件.在这种情况下,恢复并允许进程终止的唯一方法是备份并运行fs/驱动器/硬件,以便I/O可以完成,或者放弃并重新启动系统.在NFS的特定情况下,装载也可能最终超时并从I/O操作返回(带有故障代码),但这取决于装载选项,并且NFS装载通常被设置为永远等待.

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

Linux相关问答推荐

如何确定Linux上的最大静态TLS(线程本地存储)块大小?

使用awk命令将以:分隔的两个文件合并的方法

在 Linux 上的 std::threads 中创建子进程

从另一个文件中的大文件中查找行的最快方法

如何从核心转储中获取线程名称?

如何在linux中将2个不同大小的图像(边框,实际图像)合并为1个

如何在守护进程中使用 popen() 和 pclose() 获取通过管道执行的 shell 命令的正确退出代码?

在 Bash 中从最后到第一个输出文件行

RealUID,保存的 UID,有效的 UID.这是怎么回事?

更改核心转储的位置

为什么导入 SQL 这么慢?

Linux 的 TextMate 替代品

使用inotify的正确方法是什么?

使用单个命令打开 .tar.gz 文件

如何设置errno值?

初学者如何在 Linux 中开始使用 Mono?

env和set(在 Mac OS X 或 Linux 上)有什么区别?

sed - 如何使用 sed 进行正则表达式组

Linux如何确定下一个PID?

Ionic android 构建错误 - 找不到ANDROID_HOME环境变量