当前位置: 首页 > 面试题库 >

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

羊舌旭尧
2023-03-14
问题内容

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

但是我有问题。当我尝试关闭一个空的,新鲜的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再次成为快速而快乐的狐狸。


问题答案:

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

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

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



 类似资料:
  • kill 从字面来看,就是用来杀死进程的命令,但事实上,这个或多或少带有一定的误导性。从本质上讲,kill 命令只是用来向进程发送一个信号,至于这个信号是什么,是用户指定的。 也就是说,kill 命令的执行原理是这样的,kill 命令会向操作系统内核发送一个信号(多是终止信号)和目标进程的 PID,然后系统内核根据收到的信号类型,对指定进程进行相应的操作。 kill 命令的基本格式如下: [roo

  • 问题内容: 我已经为这个问题苦苦挣扎了一段时间,我似乎无法解决它。我已经尝试过不同的方法(Runtime.exec(),ProcessBuiler),但是似乎都没有用。 这是我的问题。我有一台经常打开的笔记本电脑。这台笔记本电脑运行一个Java工具,该工具通过usb连接到arduino,以打开和关闭房屋中的灯。我自己创建了这个程序,因此我也在做一些定期的维护工作。最近,我添加了一个从html界面重

  • 问题内容: 我刚刚安装了linux系统(Kubuntu),想知道是否有程序可以使python程序对于Linux可执行。 问题答案: 只需将其放在脚本的第一行即可: 使文件可执行 执行

  • 本文向大家介绍请问你有没有做过什么单元测试,怎么进行单元测试,对一个没有参数没有返回值但可能对全局变量有影响的怎么进行单元测试相关面试题,主要包含被问及请问你有没有做过什么单元测试,怎么进行单元测试,对一个没有参数没有返回值但可能对全局变量有影响的怎么进行单元测试时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 如何进行单元测试: 1、创建单元测试,该工具可以对任何类、接口、结构等实体中的字

  • 问题内容: 我开始在Linux上进行pthread编程,而在最初的程序中,我完全感到困惑。下面是我正在运行的程序 我想知道的第一件事是线程执行的顺序不是顺序的? 第二件事是我故意放置print(“ amit”); 看到main确实在线程1终止期间停止了,但是在输出中我们看到的是首先执行了printf语句。整个过程的输出是 线程1 线程2 amitThread 1返回:0 线程2返回:0 问题答案:

  • 我是RxJava的新手,正在尝试从link执行多个观测值的并行执行示例:RxJava并行获取观测值 虽然上面链接中提供的示例是并行执行可观察对象,但是当我在foreach方法中添加一个Thread.sleep(TIME_IN_MILLISECONDS)时,系统开始一次执行一个可观察对象。请帮助我理解为什么Thread.sleep停止可观察对象的并行执行。 下面是导致多个观测值同步执行的修改示例: