kill 和 kill -9 有什么区别?

What is the difference between kill and kill -9?

谁能解释一下 kill 和 kill -9 的区别。 提前致谢。

kill aka kill -TERM aka kill -15 是终止进程的安全且正确的方法。相当于安全的关闭了一台电脑。

kill -9 是残忍地杀死进程的不安全方式。相当于拔掉电源线,可能会导致数据损坏。

有关详细信息,请参阅 the Linux&Unix stack exchange

Kill 和Kill -9 都是用来杀死一个进程的。但区别在于收到 Kill 或 Kill -9 的进程的行为方式。

Kill 将生成一个 SIGTERM 信号,要求进程优雅地终止自身,即释放内存或处理其他子进程。使用 kill 杀死一个进程不会有任何副作用,比如未释放的内存,因为它被优雅地杀死了。

Kill -9 的工作方式类似,但它不会等待程序优雅地结束。 Kill -9 生成一个 SIGKILL 信号,该信号不会检查进程的状态并立即终止进程。

在coding/programming上下文中
SIGTERM(由 Kill 生成)可以在代码级别捕获和处理,如果进程仍要达到安全状态(清除内存或类似 activity)并且进程可能不会立即被杀死并且需要一些时间来清除资源然后死去。 然而 进程不能忽略 SIGKILL(由 Kill -9 生成),并且无论它们处于什么状态都会立即被杀死(这有时可能会导致一些问题,但进程肯定会被杀死)。事实上,该进程甚至不知道 SIGKILL 信号,因为该信号直接进入内核 init。那时,init 将停止进程。该过程永远没有机会捕捉信号并对其采取行动。

更精确一些 in-depth 答案。

kill 是一个实用程序,用于向一个或多个进程发送不同的信号(通常用于终止、暂停、继续等 - 操纵进程)。

当发出没有任何信号编号的kill(或信号code-name)时,将使用默认信号值,即15(等同于SIGTERM)。

因此,kill 1234 等同于:

  • kill -15 1234;
  • kill -s 15 1234;
  • kill -SIGTERM 1234;
  • kill -s SIGTERM 1234;

另一个信号代码是9,相当于code-name SIGKILL.

  • kill PID(或kill -15 PIDkill -SIGTERM)将正常关闭进程;
  • kill -9 PID(或kill -SIGKILL PID)将强制无条件地终止进程及其所有sub-processes。