核心概念processes
Linux 进程、PID 与信号
理解进程身份、父子关系、运行状态和信号处理,避免按名称或过期 PID 误终止进程。
**进程(process)**是正在执行的程序实例,拥有进程 ID(PID)、凭据、地址空间、打开文件和至少一个执行线程。**信号(signal)**是内核或其他进程发送的异步通知,用于报告事件或请求状态变化。
PID 只在进程存活期间标识它;进程退出后,系统可以把同一数字分配给新进程。因此 PID 不是永久身份。
信号如何生效
Section titled “信号如何生效”进程对某个信号可以采用默认动作、忽略它或安装处理函数;线程还可以暂时屏蔽信号。已产生但尚未递送的信号称为 pending signal。
常见信号:
| 信号 | 常见含义 | 关键性质 |
|---|---|---|
SIGTERM |
请求正常终止 | 程序可捕获并清理资源 |
SIGINT |
交互式中断 | 终端中常由 Ctrl+C 产生 |
SIGHUP |
终端断开或约定的重载请求 | 具体行为由程序定义 |
SIGSTOP |
暂停执行 | 不能捕获、屏蔽或忽略 |
SIGKILL |
立即终止 | 不能捕获、屏蔽或清理 |
进程状态与父子关系
Section titled “进程状态与父子关系”ps 中的 PPID 表示父进程。僵尸进程(Z)已经结束,只是在等待父进程读取退出状态;对僵尸进程继续发送 SIGKILL 不能替代父进程的回收责任。
不可中断睡眠(D)通常表示进程正在等待内核 I/O;信号只有在内核允许其继续执行时才可能得到处理。
kill的正式作用是“发送信号”,不等同于总是强制结束。SIGKILL不是第一选择;它会跳过应用清理流程。- 仅凭进程名或一次旧的
ps输出不足以确认目标,应核对 PID、用户、父进程和命令。 - systemd 服务可能包含多个进程并带重启策略,直接杀死一个 PID 后可能被管理器重新拉起。