为什么我不能杀死“Sl”进程?

Tim*_*Tim 5 linux process kill

在 Lubuntu 18.04 上,我打开 pcmanfm

$ pcmanfm . 
Run Code Online (Sandbox Code Playgroud)

并且在pcmanfm中查看了当前目录下的图片文件的缩略图后,我用Alt-F4关闭了pcmanfm的窗口,但它仍然挂在终端模拟器的前台。

我通过 Ctrl-Z 和 将它移到背景bg 2,然后杀死它,但不起作用。

$ jobs -l 
[2]+ 31124 Running                 pcmanfm . &
$ kill %2
$ jobs -l
[2]+ 31124 Running                 pcmanfm . &
$ sudo kill 31124
$ jobs -l
[2]+ 31124 Running                 pcmanfm . &
Run Code Online (Sandbox Code Playgroud)

它的状态是SlS表示“可中断睡眠(等待事件完成)”并l表示“是多线程的(使用 CLONE_THREAD,就像 NPTL pthread 那样)”。所以我想知道为什么我不能终止进程?你会如何杀死它?谢谢。

$ ps aux | grep [3]1124
t        31124  0.8  0.7 693952 57064 pts/9    Sl   06:34   0:47 pcmanfm 
Run Code Online (Sandbox Code Playgroud)

.

ctr*_*lor 17

默认情况下,kill 只发送一个TERM信号,由于某种原因pcmanfm忽略了这个信号。如果您通过选项 -KILL 来杀死,那么它将向调度程序发送信号,并且该进程将被删除而没有机会进行清理或上诉。

没有需要额外的特权(sudo),杀死你自己的进程。sudo可能很危险,不要只是出于沮丧而使用。

  • 但是,出于沮丧,我强烈建议使用`-KILL`。当一个愚蠢的过程在不再响应输入后最终死亡时,感觉非常好。 (5认同)
  • SIGKILL 实际上与任何其他信号的处理方式没有任何不同。不同的是进程不能改变信号的默认处理方式,即杀死进程。值得注意的是,这意味着操作系统仍然会自己清理进程(例如关闭打开的文件),并且在发生这种情况时进程将被正常调度。在极少数情况下,这可能需要一段时间,甚至挂起,使进程无法终止:https://unix.stackexchange.com/questions/81285/how-to-kill-a-process-which-cant-be-killed-无需重启 (5认同)
  • @ctrl-alt-delor 如果我没记错的话,必须安排进程以释放资源。那时它不会执行用户代码,但该进程将在内核模式下运行以释放资源。一旦完成释放资源,它就会变成僵尸,然后就再也不会被调度了。 (3认同)