killall 不会全部杀死并且很少杀死,那么命令是什么?

Mee*_*org 21 process kill killall

我偶尔会使用该killall命令来终止进程。我偶尔说的原因是在某些情况下它对我不起作用。

最近的一个例子是雷鸟,内存中大约有 5 个实例,所以我决定使用该killall命令。它杀死了 2 个进程,其中 3 个进程仍然留在内存中。再试一次,3个还在那里。

所以我手动使用该kill -9命令通过它们的 pid 杀死每个单独的进程。那奏效了。

我主要使用该kill -9命令,因为它有效。该killall命令让我失望了很多次,我只是懒得使用它。但它不起作用一定是有原因的。我用错了吗?

我知道还有其他命令,pkill但我很高兴了解为什么该killall命令无法按预期工作。我什至试图杀死一个进程,这是一次成功和失败的事情。但该kill -9命令每次都有效。

有任何想法吗?

PS:sudo没有区别

tgm*_*883 28

来自 killall 的手册页

killall 向运行任何指定命令的所有进程发送信号。如果未指定信号名称,则发送 SIGTERM。

当您执行 a 时kill -9,您正在发送 SIGKILL 信号。如果你想用killall发送一个SIGKILL,你需要做

killall -s SIGKILL <PROCESSNAME>
Run Code Online (Sandbox Code Playgroud)

很好地解释了 SIGKILL 和 SIGTERM 之间的区别(以及为什么你应该先尝试 SIGTERM)

来自http://rackerhacker.com/2010/03/18/sigterm-vs-sigkill/

在 Unix 系统上使用 kill 向进程发送信号对于大多数系统管理员来说并不是一个新话题,但我已经多次被问到 kill 和 kill -9 之间的区别。

任何时候在进程上使用 kill 时,实际上都是在向进程发送信号(几乎在所有情况下 - 我很快就会介绍)。标准 C 应用程序有一个头文件,其中包含进程在收到特定信号时应遵循的步骤。您可以通过查看 kill 的手册页来获取系统上可用信号的完整列表。

考虑这样的命令:

kill 2563

这将向进程发送一个名为 SIGTERM 的信号。流程收到通知后,可能会发生一些不同的事情:

  • 该过程可能会立即停止
  • 清理资源后,进程可能会在短暂延迟后停止
  • 该进程可能会无限期地继续运行

一旦收到 SIGTERM,应用程序就可以确定它想要做什么。虽然大多数应用程序会清理它们的资源并停止,但有些可能不会。当收到 SIGTERM 时,应用程序可能被配置为做一些完全不同的事情。此外,如果应用程序处于错误状态,例如等待磁盘 I/O,它可能无法对发送的信号采取行动。

当应用程序不响应 SIGTERM 时,大多数系统管理员通常会求助于更突然的信号:

kill -9 2563

-9 告诉kill 命令您要发送信号#9,称为SIGKILL。有了这样的名字,很明显这个信号承载了更多的重量。

尽管 SIGKILL 与 SIGTERM 定义在同一个信号头文件中,但它不能被进程忽略。事实上,该进程甚至没有意识到 SIGKILL 信号,因为该信号直接进入内核初始化程序。此时,init 将停止该进程。该过程永远不会有机会捕捉到信号并对其采取行动。

但是,内核在某些情况下可能无法成功终止进程。如果进程正在等待网络或磁盘 I/O,内核将无法停止它。内核也无法停止僵尸进程和陷入不间断睡眠的进程。需要重新启动才能从系统中清除这些进程。

当您向 Thunderbird 进程发送 killall (SIGTERM) 时,您请求停止这些进程。其中一些进程无法正常工作(可能是您首先需要杀死它们的原因),因此它们无法对 SIGTERM 信号采取行动。

  • 仍然不总是有效。 (2认同)

Eli*_*gan 6

killall接受与kill. 特别是,有没有必要写任何幻想,使killall做的等价kill -9。这工作得很好:

killall -9 thunderbird
Run Code Online (Sandbox Code Playgroud)

(当然,正如所讨论的,您通常应该不愿意使用killall -9或者,等效地killall -KILL,除非已经尝试了其他措施但没有成功。)