kill 命令用于向进程或进程组发送信号。它的名称源于历史原因:所请求的信号可能会终止、暂停或继续进程,也可能触发某种由应用程序定义的操作。发送信号前,务必确认目标完全正确,并了解该程序文档中说明的信号行为。
进程 · 第 7 课
kill(终止进程)
学习如何识别进程,并按照安全的升级顺序使用 `kill` 发送合适的信号。
请求有序终止
只提供 PID 时,kill 默认发送 SIGTERM:
$ kill 12445
显式指定信号时,建议使用符号名称:
$ kill -TERM 12445
SIGTERM 的默认动作是终止进程,但程序可以捕获或忽略它。设计良好的服务可以通过信号处理程序停止接收新任务、保存适当的状态,并释放应用程序资源。不过,这只是一种可能性,并不保证清理工作一定能立即完成或成功完成。
kill PID 默认请求发送哪个信号?
核实目标
PID 可以被重复使用,因此某个过时的 PID 之后可能会指向另一个进程。执行操作前,应立即检查当前活动的目标:
$ ps -p 12445 -o pid,ppid,user,lstart,stat,cmd
检查它的用户、启动时间、命令、父进程、所属服务以及实际职责。如果进程由服务管理器管理,应尽可能使用该管理器提供的停止或重新加载命令,使其能够维持正确状态,并避免立即重新启动子进程。
在凭据规则允许的范围内,你可以向自己拥有的进程发送信号。向其他用户的进程发送信号通常需要相应权限。在使用范围宽泛的按名称匹配命令前,必须先检查每一个匹配结果。
为什么应该在发送信号前立即检查 PID?
使用零号信号检查权限
零号信号只执行错误检查,并不会真正递送信号:
$ kill -0 12445
命令成功表示此刻存在使用该 PID 的进程,并且调用者有权向它发送信号。失败的含义并不唯一:进程可能不存在,也可能是调用者没有权限。应检查错误信息和退出状态,不要把每一次失败都理解成“进程未运行”。这也只是瞬时检查,无法消除之后发生 PID 复用竞态的可能性。
kill -0 PID 成功时,能够确定当下的什么情况?
仅在必要时升级手段
如果已获授权的目标收到 SIGTERM 后仍未终止,应先等待与工作负载相适应的时限,并调查原因。确认有必要强制终止后,再发送:
$ kill -KILL 12445
SIGKILL 无法被捕获、忽略或阻塞,因此程序没有机会执行应用层清理。它可能留下未完成的事务、临时状态,或需要其他组件处理的恢复工作。应把它作为升级手段,而不是例行使用的第一步。
其他信号的意义取决于接收程序的约定。SIGHUP 经常用于请求重新加载配置,但有些程序仍保留它默认的终止行为。SIGSTOP 会在不清理的情况下暂停进程,而 SIGCONT 会让已暂停的进程继续运行。
SIGKILL 在实际操作中的主要缺点是什么?
只应在隔离环境中,对你自己启动的进程练习选择信号。管理和监控 Linux 进程实验提供了一套受控的检查与终止流程。
课程已完成
你已完成 kill(终止进程)
现在,你可以按照审慎且可验证的流程向进程发送信号。
执行操作前,确认活动目标及其管理程序。
使用
SIGTERM发出常规终止请求。将零号信号理解为瞬时的存在性与权限检查。
只有经过调查并确认需要升级时,才使用
SIGKILL。