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 信号采取行动。
killall
接受与kill
. 特别是,有没有必要写任何幻想,使killall
做的等价kill -9
。这工作得很好:
killall -9 thunderbird
Run Code Online (Sandbox Code Playgroud)
(当然,正如所讨论的,您通常应该不愿意使用killall -9
或者,等效地killall -KILL
,除非已经尝试了其他措施但没有成功。)