首页/系统/Linux 运维命令速查/作业控制:后台/前台/挂起
进程与作业69 条

作业控制:后台/前台/挂起

交互式 shell 的作业管理:& 放后台、Ctrl+Z 挂起、fg/bg 切换、jobs 查看、disown 脱离;理解 SIGHUP 才是重点。

Linux 运维命令速查系统更新于 2026-10-13

作业控制是什么

作业控制是交互式 shell 的能力:把命令放到后台运行、用挂起快捷键把前台作业暂停、再用前后台切换命令恢复执行。理解它的关键在于退出终端时会向未脱离的后台作业发送挂断信号,这正是 nohup 与 setsid 存在的理由。

基本信息

用途当前 shell 会话内的作业切换与管理
语法命令加与号放后台、列出作业、前后台切换、按作业号发信号
快捷键挂起前台作业为停止状态
适用范围仅交互式 shell,脚本默认不启用

典型使用场景

  • 误启长任务:发现命令要跑很久时先挂起,再切到后台继续
  • 临时并行:把耗时任务放后台,前台继续做别的事
  • 查看会话内作业:列出当前会话的作业与状态
  • 停止作业:按作业号发送信号,不用手工查进程号
  • 脱离挂断信号:把作业从作业表移除,退出终端时不被终止

常用示例

常用示例
sleep 300 &            # 放到后台运行
jobs -l                # 查看作业号与进程号
fg %1                  # 把作业拉回前台
# 运行中按挂起快捷键暂停,然后:
bg %1                  # 让挂起的作业在后台继续
kill %1                # 按作业号发送终止信号
disown -h %1           # 从作业表移除,退出终端时不再收挂断信号

操作对照

写法作用注意
命令加与号后台运行输出仍打到终端,建议重定向
挂起快捷键暂停前台作业作业状态变为已停止
jobs -l列出作业与进程号带进程号便于配合 ps 查看
fg %n拉到前台前台同时只能有一个作业
bg %n后台继续对已停止的作业生效
disown从作业表移除退出终端时不再受挂断信号影响
退出终端会向未脱离的后台作业发送挂断信号,这就是需要 nohup 或 setsid 的原因。
作业号随作业增删而变化,脚本里不要依赖它,直接管理进程号更可靠。
非交互脚本默认不启动作业控制,后台任务要用等待命令处理进程号,别指望交互式的那套语义。

易错点

  • 作业号会随作业增删变化,脚本里用它定位进程迟早出错,应直接管理进程号
  • 非交互脚本没有作业控制,前后台切换命令不可用,后台任务要用等待命令处理
  • 后台作业的输出仍会写终端,可能打乱后续命令的显示,启动时就该重定向
  • 退出终端前忘记脱离挂断信号,长任务会随会话结束被终止

数据来源与参考

  • man 1 bash(Job Control 章节)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌