当前位置: 首页>>技术教程>>正文


kill命令中-9选项的用途是什么?

, ,

问题描述

两者之间有区别吗?

kill -9 212121

kill 212121

最佳解决方法

kill的Ubuntu手册页解释了-9交换机的用途(当然是以相当不稳定的方式):

Name     Num   Action    Description
KILL       9   exit      cannot be blocked

这是another man page所说的。

The command kill sends the specified signal to the specified process or process group. If no signal is specified, the TERM signal is sent. The TERM signal will kill processes which do not catch this signal. For other processes, it may be necessary to use the KILL (9) signal, since this signal cannot be caught.


因此,使用-9开关可确保有效地终止该过程。即使冻结或无响应的过程可能无法响应简单的TERM信号,它也会在发送KILL信号时死亡。

次佳解决方法

kill命令将定义的signal发送到具有给定标识(PID)的进程:

kill -<signal> <pid>

当然,我们只能杀死我们拥有的进程,而root可以杀死所有进程。有关计算信号的精彩摘要,请参阅Wikipedia

可以发送的信号kill列在manpage中。信号可以用名字或数字表示。如果没有给出信号,则默认信号为15。使用TERM

因此,以下所有三个命令都相同:

kill -9 1234
kill -KILL 1234
kill -SIGKILL 1234

SIGTERMSIGKILL之间的区别在于应用程序可能对信号起作用的方式:

  • TERM:应用程序将能够终止,即正确运行关闭例程。

  • KILL:应用程序立即停止并终止(这可能导致数据丢失或提高apport以报告某些情况下的假定崩溃)。

第三种解决方法

请注意,以下所有内容都是同义词:

kill -9 1234
kill -KILL 1234
kill -SIGKILL 1234

值得指出的是,在信号处理领域,SIGKILL是少数由操作系统而非程序处理的独特系统之一。当您运行kill -9时,您没有告诉应用程序自行终止,而是告诉操作系统停止运行程序,无论程序在做什么。

发送SIGKILL后,程序将立即停止。如果代表程序正在运行任何内核调用(例如文件IO),那么这些调用可能会继续,也可能不会继续,直到它们完成,具体取决于调用,但程序本身将不再运行。请注意,在调试器下运行的跟踪任务或任务在此处的行为可能不同。

另一个无法阻止的信号是SIGSTOP,它具有类似的效果,但会冻结程序;您可以稍后发送SIGCONT以恢复它。此行为完全由操作系统控制,并且程序未获得任何事先通知。

所有其他信号都发送到程序;它可以处理它们,但是如果它忽略了信号,则遵循默认行为。

以下是您可能发现自己发送到流程的一些有用信号:

  • SIGHUP – hangup告诉程序用户已断开连接(例如,SSH会话或终端窗口已关闭)。通常会正常关闭程序。

  • SIGINT – 中断当你点击CTRL + C时发送通常意味着“停止你正在做的事情” – 可能会也可能不会杀死程序

  • SIGTERM – 终止由killkillall发送的默认值。通常终止程序…有时在程序完成它正在做的任何事情之后。

  • SIGSTOP – 当您点击CTRL + Z时停止发送暂停程序,如上所述

  • SIGPIPE – 管道关闭告诉程序管道已关闭。通常终止程序。例如,cat /etc/passwd | head -n1将在打印第一行后将SIGPIPE发送到cat进程,导致cat在完成整个文件之前终止。

虽然所有这些信号都在自己的设置中发生”naturally”,但您可以使用该信号伪造条件以达到所需的结果。

例如,如果要终止某人的SSH会话,您可以简单地终止该进程,但这样做会阻止它更新其HISTORY文件,这可能因安全原因而非常重要。但是如果你发送它SIGHUP,那么该过程将假设连接已经死亡并将执行其标准清理。

第四种方法

kill -9含义:进程将被内核杀死;这个信号不容忽视。 9表示不可捕获或可忽略的KILL信号

用途:SIGKILL singal

杀戮意义:没有任何信号的kill命令传递信号15,它以正常方式终止进程。

用途:SIGTERM信号,可由程序员处理

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1958.html,未经允许,请勿转载。