killall并没有全部杀死而且很少杀人,那么命令是什么?
我偶尔使用killall
命令来杀死进程。 我之所以说是偶然的,在某些情况下它对我没用。
最近的一个例子是thunderbird,其中内存中有大约5个实例,所以我决定使用killall
命令。 它杀死了2个进程,3个仍留在内存中。 再次尝试,3人仍在那里。
所以我手动使用kill -9
命令通过它们的pid杀死每个进程。 那很有效。
我主要使用kill -9
命令。 killall
命令让我失望了很多次,我只是不打扰使用它。 但必须有一个原因,它不起作用。 我用错了吗?
我知道还有像pkill
这样的其他命令,但我很高兴理解为什么killall
命令不能按预期工作。 我甚至试图杀死一个进程,这是一个打击和错过的事情。 但kill -9
命令每次都有效。
有任何想法吗?
PS: sudo
没有什么区别
从killall的手册页
killall向运行任何指定命令的所有进程发送信号。 如果未指定信号名称,则发送SIGTERM。
当您执行kill -9
,您正在发送SIGKILL信号。 如果你想发送带有killall的SIGKILL,你需要这样做
killall -s SIGKILL
很好地解释了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相同的信号头文件中定义,但该过程不能忽略它。 实际上,由于信号直接进入内核init,因此该过程甚至不知道SIGKILL信号。 此时,init将停止该过程。 这个过程永远不会有机会捕获信号并采取行动。
但是,在某些情况下,内核可能无法成功终止进程。 如果进程正在等待网络或磁盘I / O,则内核将无法停止它。 内核也无法阻止陷入不间断睡眠状态的僵尸进程和进程。 需要重新启动才能从系统中清除这些进程。
当您将killall(SIGTERM)发送到thunderbird进程时,您请求停止这些进程。 其中一些进程无法正常工作(可能为什么你需要先杀掉它们),所以它们无法对SIGTERM信号起作用。
killall
接受大多数与kill
相同的语法。 特别是,没有必要编写任何想要使killall
相当于kill -9
。 这很好用:
killall -9 thunderbird
(当然,正如所讨论的那样,你通常不愿意使用killall -9
或等效的killall -KILL
,除非已经尝试了其他措施但没有成功。)