fg
命令恢复前台运行,或用bg
转为后台运行,通过jobs
查看挂起任务列表,%n
指定任务号恢复。在Linux系统中,使用 Ctrl+Z 挂起(暂停)程序后,程序会进入后台并处于停止状态,若要找回并恢复程序运行,需掌握Linux的作业控制(Job Control)机制,以下是详细操作指南:
核心步骤:恢复挂起的程序
-
查看挂起的程序
输入命令查看所有后台作业(包括挂起状态):jobs
输出示例:
[1] + Stopped vim file.txt [2] - Stopped python script.py
[1]
和[2]
是作业编号(Job ID),表示最近挂起的程序,表示次近的。 -
恢复程序到前台运行
- 恢复最近挂起的程序:
fg # 等同于 fg %%
- 恢复指定作业编号的程序(例如作业1):
fg %1 # %不可省略
程序会回到前台继续运行,状态从
Stopped
变为Running
。
- 恢复最近挂起的程序:
-
恢复程序到后台运行
若希望程序在后台继续运行(不占用终端):bg %1 # 将作业1置于后台运行
程序会输出类似:
[1] + python script.py &
高级操作:处理特殊场景
✅ 场景1:忘记作业编号
-
通过进程名查找挂起程序:
ps aux | grep -E "T|STAT" # 查找状态为T(停止)的进程
输出中
STAT
列为T
的即挂起进程,记录其PID
(进程ID)。 -
用
PID
恢复程序:fg $(jobs -p | grep PID) # 替换PID为实际数字
✅ 场景2:退出终端后恢复
若已断开终端,常规方法失效,此时需:
- 通过
ps -ef
查找挂起进程的PID
。 - 发送
CONT
信号唤醒:kill -CONT PID # 唤醒进程 disown PID # 断开与终端的关联(可选) nohup COMMAND & # 未来建议用nohup启动长任务
✅ 场景3:多个挂起程序的管理
命令 | 作用 |
---|---|
jobs -l |
显示作业编号和进程ID |
fg %n / bg %n |
操作指定作业编号的程序 |
kill %n |
终止指定作业 |
防丢指南:预防程序丢失
-
推荐工具
tmux
或screen
:会话管理工具,关闭终端也不丢失程序。tmux new -s mysession # 新建会话 Ctrl+B D # 脱离会话 tmux attach -t mysession # 重新接入
nohup
:免疫SIGHUP信号(终端关闭时程序不退出)。nohup python script.py &
-
关键区别
| 状态 | Ctrl+Z(挂起) | Ctrl+C(终止) |
|———-|————————|———————|
| 恢复方式 | 可用fg
/bg
恢复 | 程序彻底结束 |
| 进程状态 |T
(Stopped) | 消失 |
原理解析
- Ctrl+Z 发送
SIGTSTP
信号,暂停程序并将其移至后台。 - fg/bg 发送
SIGCONT
信号唤醒程序,区别在于前台/后台运行。 - 若终端关闭,所有关联程序会收到
SIGHUP
信号(默认终止进程)。
📌 最佳实践:生产环境长时间任务务必使用
tmux
或nohup
启动程序!
引用说明
- Linux手册页:
man bash
(作业控制章节)、man signal
(信号列表) - GNU文档:《Bash Reference Manual》作业控制部分
- POSIX标准:IEEE Std 1003.1-2017(Shell命令规范)
通过以上操作,可高效管理挂起程序,建议结合工具规范工作流,避免数据丢失风险。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/8931.html