news 2026/4/16 12:32:01

Linux bg 命令详解与示例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux bg 命令详解与示例

Linuxbg命令详解与示例

bg(background)命令用于将挂起的作业放到后台继续运行。它是作业控制(job control)的重要命令之一。

基本概念

作业状态

# 前台作业 (Foreground job) command # 在前台运行,占用终端 # 后台作业 (Background job) command & # 直接在后台运行 # 挂起作业 (Suspended job) Ctrl + Z # 暂停当前前台作业,变为挂起状态

基本语法

bg [作业号] # 将指定作业放到后台运行 bg # 将当前作业(最近挂起的)放到后台

基础示例

示例1:基本使用流程

# 1. 启动一个长时间运行的前台作业 $ sleep 100 # 现在终端被占用 # 2. 按 Ctrl+Z 暂停这个作业 ^Z [1]+ Stopped sleep 100 # 3. 查看作业状态 $ jobs [1]+ Stopped sleep 100 # 4. 放到后台继续运行 $ bg %1 [1]+ sleep 100 & # 或简写 $ bg [1]+ sleep 100 & # 5. 验证作业在后台运行 $ jobs [1]+ Running sleep 100 &

示例2:多个作业管理

# 启动多个作业 $ sleep 200 ^Z [1]+ Stopped sleep 200 $ sleep 300 ^Z [2]+ Stopped sleep 300 $ sleep 400 ^Z [3]+ Stopped sleep 400 # 查看所有作业 $ jobs [1] Stopped sleep 200 [2]- Stopped sleep 300 [3]+ Stopped sleep 400 # + 表示最近访问的作业,- 表示次近的作业 # 将作业2放到后台 $ bg %2 [2]- sleep 300 & # 将最近挂起的作业(作业3)放到后台 $ bg [3]+ sleep 400 & # 查看状态 $ jobs [1] Stopped sleep 200 [2]- Running sleep 300 & [3]+ Running sleep 400 &

作业标识符

引用作业的方式

# 1. 使用作业号 bg %1 # 作业号1 bg %2 # 作业号2 # 2. 使用特殊符号 bg %% # 当前作业(最近挂起的) bg %+ # 同上,当前作业 bg %- # 上一个作业 # 3. 使用命令前缀 bg %sleep # 以'sleep'开头的作业 bg %?sleep # 包含'sleep'的作业 # 4. 使用进程ID $ jobs -l [1]+ 12345 Stopped sleep 100 bg %1 # 使用作业号 # 不能直接用进程ID:bg 12345 ❌

实际应用场景

场景1:编译大型项目

# 1. 开始编译(可能耗时很长) $ make all # 编译进行中... # 2. 突然需要执行其他命令 Ctrl+Z [1]+ Stopped make all # 3. 放到后台继续编译 $ bg [1]+ make all & # 4. 现在可以继续使用终端 $ ls $ git status # ... 其他操作 # 5. 查看编译进度 $ jobs [1]+ Running make all & # 6. 需要时带回前台 $ fg %1

场景2:下载文件时操作终端

# 1. 开始下载大文件 $ wget http://example.com/large-file.iso # 正在下载... # 2. 需要临时检查系统状态 Ctrl+Z [1]+ Stopped wget http://example.com/large-file.iso # 3. 将下载放到后台 $ bg [1]+ wget http://example.com/large-file.iso & # 4. 检查系统 $ df -h # 检查磁盘空间 $ free -h # 检查内存 # 5. 恢复下载到前台查看进度 $ fg wget http://example.com/large-file.iso # 可以看到下载进度,再次按 Ctrl+Z 可暂停

场景3:数据库备份

# 1. 开始数据库备份 $ mysqldump -u root -p database > backup.sql Enter password: **** # 备份进行中... # 2. 需要紧急处理其他事情 Ctrl+Z [1]+ Stopped mysqldump -u root -p database > backup.sql # 3. 备份放到后台继续 $ bg [1]+ mysqldump -u root -p database > backup.sql & # 4. 处理紧急任务 $ systemctl status important-service $ tail -f /var/log/important.log # 5. 监控备份进度 $ ls -lh backup.sql # 查看文件大小增长 $ jobs # 查看作业状态

高级用法

结合nohup使用

# 启动一个后台作业,即使关闭终端也继续运行 $ nohup some_long_command & # 或 $ some_long_command Ctrl+Z $ bg $ disown # 将作业从作业表中移除,使其在终端关闭后仍运行

管道命令的作业控制

# 1. 启动一个管道命令 $ find / -name "*.conf" 2>/dev/null | grep "network" | tee output.txt # 命令执行中... # 2. 暂停整个管道 Ctrl+Z [1]+ Stopped find / -name "*.conf" 2>/dev/null | grep "network" | tee output.txt # 3. 后台继续 $ bg [1]+ find / -name "*.conf" 2>/dev/null | grep "network" | tee output.txt & # 4. 监控输出 $ tail -f output.txt

脚本中的作业控制

#!/bin/bash # script_with_jobs.sh echo "Starting task 1..." sleep 30 & JOB1=$! # 获取后台进程ID echo "Starting task 2..." sleep 40 & JOB2=$! echo "Starting interactive task..." # 模拟前台任务 sleep 20 # 按 Ctrl+Z 可以暂停这个脚本本身 echo "Task 1 PID: $JOB1" echo "Task 2 PID: $JOB2" # 等待所有后台作业完成 wait $JOB1 $JOB2 echo "All tasks completed"

常见问题与解决方案

问题1:作业停止输出

# 后台作业默认输出到终端,可能干扰 $ find / -name "*.log" > logs.txt & [1] 45678 # 但仍有错误输出到终端 # 解决方案:重定向所有输出 $ find / -name "*.log" > logs.txt 2>&1 &

问题2:需要输入的后台作业

# 后台作业请求输入时会暂停 $ mysql -u root -p Enter password: ^Z [1]+ Stopped mysql -u root -p $ bg [1]+ mysql -u root -p & # 作业会暂停等待输入,而不是继续运行 # 解决方案1:使用 expect 或脚本提供输入 # 解决方案2:使用无密码认证或配置文件

问题3:终端关闭后作业终止

# 后台作业默认随终端关闭而终止 $ sleep 1000 & [1] 12345 # 关闭终端,作业会被终止 # 解决方案: $ sleep 1000 & $ disown # 将作业与当前shell分离 # 或 $ nohup sleep 1000 &

相关命令

jobs- 查看作业状态

jobs # 列出作业 jobs -l # 列出作业及进程ID jobs -p # 只列出进程ID jobs -r # 只列出运行中的作业 jobs -s # 只列出暂停的作业

fg- 将作业带到前台

fg %1 # 将作业1带到前台 fg # 将当前作业带到前台

kill- 终止作业

kill %1 # 终止作业1(发送SIGTERM) kill -9 %1 # 强制终止作业1(发送SIGKILL)

wait- 等待作业完成

sleep 10 & JOB1=$! sleep 20 & JOB2=$! wait $JOB1 # 等待作业1完成 echo "Job 1 completed" wait # 等待所有后台作业完成 echo "All jobs completed"

实战示例

示例1:监控日志文件

# 1. 启动日志监控 $ tail -f /var/log/syslog # 监控日志... # 2. 暂停监控,执行清理 Ctrl+Z [1]+ Stopped tail -f /var/log/syslog $ sudo logrotate /etc/logrotate.conf $ sudo systemctl restart syslog # 3. 恢复监控 $ bg [1]+ tail -f /var/log/syslog &

示例2:并行处理任务

# 并行处理多个文件 for file in *.log; do process_file "$file" & done # 查看后台作业 jobs # 暂停所有作业(需要逐个暂停) # 或者使用进程组

示例3:开发中的调试

# 1. 启动开发服务器 $ python manage.py runserver # 服务器运行... # 2. 需要修改代码 Ctrl+Z [1]+ Stopped python manage.py runserver # 3. 服务器放到后台 $ bg [1]+ python manage.py runserver & # 4. 编辑代码 $ vim views.py # 5. 带回前台查看日志 $ fg python manage.py runserver # 查看输出,测试功能

交互式工作流程示例

# 典型的工作会话 $ find /usr -name "*.so" > libraries.txt ^Z [1]+ Stopped find /usr -name "*.so" > libraries.txt $ bg %1 [1]+ find /usr -name "*.so" > libraries.txt & $ grep something important.txt ^Z [2]+ Stopped grep something important.txt $ ls -la total 100 ... $ fg %2 grep something important.txt # 查看结果 $ jobs [1]+ Running find /usr -name "*.so" > libraries.txt & $ kill %1 # 终止find命令 [1]+ Terminated find /usr -name "*.so" > libraries.txt

最佳实践

  1. 及时清理:完成后台作业后及时清理
  2. 使用作业号:明确指定作业号,避免混淆
  3. 监控状态:定期使用jobs检查后台作业
  4. 处理输出:重定向后台作业的输出,避免干扰
  5. 分离关键作业:使用nohupdisown处理需要持久运行的作业

限制与注意事项

  1. 仅限当前终端:作业控制只在当前shell会话中有效
  2. 某些命令不可暂停:如vimtop等全屏程序
  3. 信号传递bg发送 SIGCONT 信号继续作业
  4. 资源竞争:多个后台作业可能竞争CPU和I/O资源

总结

bg命令是 Linux 作业控制的核心工具之一,允许用户:

  • 将暂停的作业转为后台运行
  • 管理多个并发任务
  • 灵活切换工作焦点
  • 实现基本的并行处理

掌握bgfgjobsCtrl+Z这一套作业控制工具,可以显著提高命令行工作效率,特别是在处理长时间运行的任务时。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 12:08:23

vue大文件上传的教程:从入门到进阶实战

(抱着键盘在宿舍转圈圈版) 各位大佬好呀!我是福州某大学网络工程大三刚学会console.log()的编程小白秃头预备役。最近被导师按头要求搞个"能上传10G文件还带加密的文件夹传输系统",现在每天的状态be like: …

作者头像 李华
网站建设 2026/4/14 7:46:40

【Docker健康检查优化实战】:5个关键策略提升容器稳定性

第一章:Docker健康检查的核心价值与应用场景在容器化部署日益普及的今天,确保服务持续可用变得尤为关键。Docker健康检查机制允许开发者定义容器内应用的运行状态检测逻辑,从而让平台自动识别并处理异常实例,显著提升系统的自愈能…

作者头像 李华
网站建设 2026/4/16 11:10:31

英文提示词为何更适合VibeThinker?深入解析其推理机制

英文提示词为何更适合VibeThinker?深入解析其推理机制 在当前AI模型“军备竞赛”愈演愈烈的背景下,动辄数百亿参数的大模型似乎成了技术实力的象征。然而,真正推动落地的,往往不是最庞大的系统,而是那些能在特定任务中…

作者头像 李华
网站建设 2026/4/16 11:04:05

【生产环境实测】:这套Docker故障检测与恢复脚本已稳定运行3年

第一章:Docker故障恢复脚本的生产实践背景 在现代微服务架构中,Docker已成为应用部署的核心技术之一。随着容器数量的增长和业务复杂度的提升,单一容器或服务的异常可能导致整个系统可用性下降。因此,构建一套自动化、可复用的故障…

作者头像 李华
网站建设 2026/4/11 20:16:44

计算机视觉入门到实战系列(二)认识各种卷积核

认识各种卷积核1. 冲激核(Impulse Kernel / Dirac Delta)基本概念常见形式物理意义卷积效果:**身份变换**数学特性在你的代码中2. 方波信号核(Box Kernel / Moving Average Kernel)基本概念常见形式物理意义卷积效果&a…

作者头像 李华
网站建设 2026/4/15 17:29:00

实例控制台点击网页推理入口使用全攻略

VibeThinker-1.5B-APP 网页推理入口使用深度解析 在当前AI模型“军备竞赛”愈演愈烈的背景下,动辄百亿千亿参数的大模型固然引人注目,但真正能落地到实际场景、被普通开发者轻松使用的工具,反而越来越稀缺。就在这种高门槛与高成本并存的环境…

作者头像 李华