SIGTERM vs SIGKILL:有什么区别?
时间:2020-03-05 15:29:40 来源:igfitidea点击:
终止进程是Linux中进程管理的关键部分。
由于进程管理本身就是一个主题,因此在本文中,我将不涉及管理用户进程和信号处理的详细信息。
我将专注于使用SIGTERM和SIGKILL信号终止进程。
我还将讨论为什么我们应该避免使用SIGKILL。
什么是SIGTERM?
在类UNIX系统中,SIGTERM信号用于终止程序。
我们可以从它的名称(由SIGnal和TERMinate组成)的名称中猜测到这一点。
SIGTERM也可以称为软终止,因为接收SIGTERM信号的进程可以选择忽略它。
换句话说,这是杀死进程的一种礼貌方式。
如何在Linux中将SIGTERM发送到进程?
Linux中的kill命令用于将所有此类信号发送到进程。
默认情况下,kill命令发送SIGTERM信号。
我们可以用-15明确提及它,但这是多余的。
我们需要了解该过程的pid才能以以下方式使用此命令:
kill <process_id>
我们可以在Linux中使用ps命令来获取进程ID。
什么是SIGKILL?
SIGKILL用于立即终止进程。
此信号不可忽略或者阻止。
该进程将与其线程(如果有)一起终止。
这是杀死进程的一种残酷方式,应仅将其用作最后的手段。
假设我们要关闭一个无响应的进程。
在这种情况下可以使用SIGKILL。
如何将SIGKILL发送到Linux中的进程?
我们可以使用选项-9发送带有kill命令的SIGKILL信号并立即终止该进程:
kill -9 <process_id>
SIGTERM与SIGKILL:为什么比SIGKILL更喜欢使用SIGTERM?
尽管这两个信号都用于终止进程,但两者之间还是有一些区别的:
- SIGTERM正常终止进程,而SIGKILL立即终止进程。
- 可以处理,忽略和阻止SIGTERM信号,但不能处理或者阻止SIGKILL。
- SIGTERM不会终止子进程。 SIGKILL也会杀死子进程。
一些Linux用户习惯于使用“ kill -9”,这是我们应避免的事情。
除非进程没有响应,否则我们无需使用SIGKILL。
使用SIGTERM,进程可以花时间将信息发送到其父进程和子进程。
它的子进程由init处理。
使用SIGKILL可能会导致创建僵尸进程,因为被杀死进程没有机会告诉其父进程它已经收到了杀死信号。