两者之间有区别吗
kill -9 212121
和
kill 212121
两者之间有区别吗
kill -9 212121
和
kill 212121
Answers:
kill -<signal> <pid>
当然,我们只能杀死我们拥有的进程,而root可以杀死所有进程。有关计算信号的详细概述,请参见Wikipedia。
信号kill
可以发送在上市手册页。信号可以用名称或数字表示。如果未给出信号,则默认信号为15。TERM
用来。
因此,以下所有三个命令都相同:
kill -9 1234
kill -KILL 1234
kill -SIGKILL 1234
SIGTERM
和之间的区别SIGKILL
是应用程序对信号的作用方式:
TERM
:应用程序将能够终止,即正确运行关闭例程。 KILL
:应用程序立即停止并被终止(在某些情况下,这可能会导致数据丢失或增加报告假定的崩溃的权限)。请注意,以下所有都是同义词:
kill -9 1234
kill -KILL 1234
kill -SIGKILL 1234
值得指出的是,在信号处理领域,SIGKILL是少数几个由操作系统而非程序处理的独特代码之一。运行时kill -9
,您不是在告诉应用程序终止自身,而是在告诉OS停止运行该程序,无论该程序在做什么。
发送SIGKILL后,程序将立即停止。如果代表该程序正在运行任何内核调用(例如,文件IO),则取决于调用,这些调用可能会或可能不会一直持续到完成为止,但程序本身将不再运行。请注意,此处跟踪的任务或在调试器下运行的任务的行为可能有所不同。
另一个不能阻止的信号是SIGSTOP,它具有类似的效果,但是会冻结程序;您可以稍后发送SIGCONT以继续。此行为完全由OS控制,并且程序不会获得任何事先通知。
所有其他信号都发送到程序;它可以选择处理它们,或者如果忽略信号,则遵循默认行为。
以下是一些有用的信号,您可能会发现自己发送到了流程:
kill
和killall
。cat /etc/passwd | head -n1
,在cat
打印第一行之后将SIGPIPE发送到该进程,从而导致cat
在完成整个文件之前终止。尽管所有这些信号都是在其自身设置中“自然”发生的,但是您可以使用该信号来伪造条件以获得所需的结果。
例如,如果您想终止某人的SSH会话,则可以简单地终止该过程,但是这样做可以防止其更新其HISTORY文件,出于安全原因,这可能很重要。但是,如果您将其发送给SIGHUP,则该过程将假定连接已终止并执行其标准清除。
SIGQUIT
,默认操作是转储核心并终止。如果程序做错了什么,您需要立即将其停止,并希望以后能够进行调试,则可以使用此方法。
kill -9