为什么killall命令只杀死进程的一个实例?

为什么killall命令只杀死进程的一个实例?

有时我需要杀死 Google Chrome(其中我打开了 2 个窗口/实例)。两个实例都是不是在隐身模式下。

我所做的是:(在 Debian 8 上)

杀死所有铬 && 杀死所有铬

关闭 2 个 chrome 窗口。

不过我读到了全杀命令应该杀死所有实例一个程序,而不仅仅是一个程序。

所以我想知道:为什么killall 不像名字所暗示的那样杀死所有实例?

答案1

我尝试了两个进程,它的工作原理如下:

jai@jai-VirtualBox:/tmp$ sleep 100 &
[1] 3996
jai@jai-VirtualBox:/tmp$ sleep 60 &
[2] 3997
jai@jai-VirtualBox:/tmp$ pgrep -l sleep
3996 sleep
3997 sleep
jai@jai-VirtualBox:/tmp$ killall -v sleep
Killed sleep(3996) with signal 15
Killed sleep(3997) with signal 15
[1]-  Terminated              sleep 100
[2]+  Terminated              sleep 60

jai@jai-VirtualBox:/tmp$ pgrep -l sleep
jai@jai-VirtualBox:/tmp$ 

-v您可以使用(详细)或(交互式)重试吗-i

答案2

您可以使用命令 top 显示进程

top

杀死进程

 kill PID_of_chrome

答案3

Chrome 浏览器在启动时生成多个线程,然后为随后创建的每个窗口和/或选项卡生成额外的线程。

默认情况下,killall 会向所有具有特定名称(在您的情况下为“chrome”)的进程发送 SIGTERM。但只有能够处理该信号的进程才会继续处理它。无法处理 SIGTERM 信号的将不会关闭。你可以用killall -9 无条件杀死他们

答案4

有可能其中一个 chrome 实例忽略了SIGTERM信号,等待一秒钟确认?killall -9 chrome可能会做你想做的事。

相关内容