Linux中暂停进程最常用方式是kill -STOP <PID>,使进程进入Stopped状态(ps中显示为T);也可用Ctrl+Z挂起前台进程(发SIGTSTP),或pgrep结合kill批量操作;需注意权限限制和内核线程不可挂起。

Linux 中使用 SIGSTOP 信号暂停进程运行,核心是向目标进程发送不可忽略、不可捕获的停止信号,使其立即进入 Stopped 状态(在 ps 或 top 中显示为 T),且不终止进程本身,后续可随时恢复。
直接用 kill 命令发送 SIGSTOP
这是最常用、最可靠的方式,语法清晰,语义明确:
-
kill -STOP <PID>—— 推荐写法,可读性强,明确意图 -
kill -19 <PID>—— 使用信号编号,效果完全等同
例如挂起 PID 为 2847 的进程:kill -STOP 2847
执行后可用 ps -o pid,stat,comm -p 2847 验证,STAT 列应显示 T。
根据进程名快速挂起(无需先查 PID)
当只知道命令名(如 python3 server.py)时,可组合 pgrep 和 kill:
- 只挂起第一个匹配进程:
kill -STOP $(pgrep -f "server.py") - 挂起所有匹配进程:
pgrep -f "server.py" | xargs kill -STOP
-f 参数确保匹配完整命令行,比仅用进程名更准确;若省略 -f,pgrep python3 可能误匹配其他 Python 进程。
前台进程的快捷挂起方式
如果进程正在当前终端前台运行(比如直接执行 sleep 100),可直接按:
Ctrl + Z —— 系统自动向该前台进程发送 SIGTSTP(功能类似 SIGSTOP,但可被进程捕获或忽略)
此时进程进入暂停状态,shell 提示符返回。之后可用:
-
fg—— 恢复到前台继续运行(等效于kill -CONT) -
bg—— 在后台继续运行
注意:Ctrl+Z 发的是 SIGTSTP,不是 SIGSTOP;但对大多数用户场景效果一致,且无需记 PID。
权限与限制要点
挂起操作受权限严格约束:
- 普通用户只能挂起自己启动的进程
- 要挂起其他用户(含 root)的进程,必须加
sudo:sudo kill -STOP 5678 - 内核线程(如
[kthreadd])、部分关键系统进程会拒绝挂起,返回Operation not permitted
SIGSTOP 由内核直接处理,不经过进程用户态逻辑,因此响应即时、稳定,适合调试、资源调度或临时冻结任务。


















