Linux进程挂起与恢复依赖SIGTSTP/SIGSTOP/SIGCONT信号及作业控制命令:前台进程用Ctrl+Z挂起、fg/bg恢复;任意进程用kill -STOP/-CONT配合PID或pgrep操作,需注意权限限制与内核线程不可挂起。

Linux 中管理进程挂起与恢复,核心靠信号机制和作业控制命令,分两类场景:前台交互式进程(快捷键操作)和任意进程(基于 PID 或名称的精确控制)。关键在于理解 SIGTSTP、SIGSTOP、SIGCONT 这三个不可忽略的信号,以及它们触发的不同行为。
前台进程:用 Ctrl+Z 挂起,再用 fg/bg 恢复
当你在终端中直接运行一个程序(如 ping google.com、vim file.txt),它默认占据前台。此时:
- 按 Ctrl+Z,Shell 会向该进程组发送 SIGTSTP 信号,进程立即暂停,状态变为 T(stopped),并转入后台作为“已停止作业”
- 执行 jobs 可查看所有挂起或后台运行的作业,例如显示 [1]+ Stopped ping google.com
- 用 fg %1 把作业 1 拉回前台继续运行;用 bg %1 让它在后台继续运行(需进程本身支持后台执行)
任意进程:用 kill -STOP 和 kill -CONT 控制
对不在当前 Shell 会话中的进程(比如其他终端启动的、守护进程、或你只知道 PID 的任务),必须用 kill 命令发送信号:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 挂起:kill -STOP <PID>(推荐写法)或 kill -19 <PID>。进程状态列(STAT)将显示 T
- 恢复:kill -CONT <PID> 或 kill -18 <PID>
- 若只知道进程名(如 sleep),可用组合命令:kill -STOP $(pgrep -f "sleep" | head -n1)(只挂第一个匹配项);或 pgrep -f "sleep" | xargs kill -STOP(挂起全部)
注意权限与限制
挂起操作不是谁都能做:
- 普通用户只能挂起自己启动的进程;要挂起别人(包括 root)的进程,必须加 sudo,例如 sudo kill -STOP 5678
- 内核线程(如 [kthreadd])或关键系统进程通常拒绝挂起,返回 Operation not permitted
- suspend 是 Bash 内建命令,只用于挂起当前 Shell 本身(非一般进程),且默认禁止对登录 Shell 使用,除非加 -f 强制
别把“挂起”和“交换到磁盘”混淆
日常说的“挂起进程”,绝大多数指用 SIGSTOP 暂停执行——进程仍在内存中,只是不被调度。这跟操作系统因内存不足而把进程数据换出到 swap 分区的“挂起”(Suspended to disk)是两回事。后者无需人工干预,由内核自动触发,也无需你发信号恢复。

















