Linux 命令行上的
kill
和 kill -9
有什么区别?
kill
又名 kill -TERM
又名 kill -15
是终止进程的安全且正确的方法。相当于安全关闭电脑。
kill -9
是残酷地杀死进程的不安全方式。相当于拔掉电源线,可能会导致数据损坏。
请参阅Linux&Unix 堆栈交换了解更多信息。
Kill 和 Kill -9 都用于杀死进程。但区别在于收到 Kill 或 Kill -9 的进程的行为方式。
Kill 将生成一个 SIGTERM 信号,要求进程优雅地终止自身,即释放内存或照顾其他子进程。使用kill杀死一个进程不会有任何副作用,比如未释放的内存,因为它被优雅地杀死了。
Kill -9 的工作原理类似,但它不会等待程序优雅地终止。 Kill -9 生成一个 SIGKILL 信号,该信号不会检查进程的状态并立即终止进程。
在编码/编程环境中
SIGTERM(由 Kill 生成)可以在代码级别捕获和处理,如果进程仍要达到安全状态(清除内存或类似活动),并且进程可能不会立即被杀死,需要一些时间来清除资源然后死亡。
然而
进程不能忽略SIGKILL(由Kill -9生成),并且无论它们处于什么状态都会立即被杀死(这有时可能会导致一些问题,但进程肯定会被杀死)。事实上,该进程甚至没有意识到 SIGKILL 信号,因为该信号直接进入内核 init。此时,init 将停止该进程。该进程永远没有机会捕获信号并对其采取行动。
kill
是一种实用程序,用于向一个或多个进程发送不同的信号(通常用于终止、暂停、继续等 - 操作进程)。
在没有任何信号编号(有时称为信号代码)的情况下执行
kill
时,将使用默认信号编号15
,相当于SIGTERM
信号名称。
另一个信号编号是
9
,相当于 SIGKILL
信号名称。
kill -15 PID
(与kill PID
相同)和kill -9 PID
之间的区别在于,首先优雅地关闭指定进程,然后强制关闭指定进程,杀死该进程及其所有子进程。
通常,要终止特定进程,您可以使用
kill
以四种替代方式之一:
kill -signalnumber PID
kill -s signalnumber PID
kill -SIGNALNAME PID
kill -s SIGNALNAME PID
(PID代表进程ID)