news 2026/5/7 12:56:05

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/5/5 0:24:23

Cilium监控日志无从下手?10个关键配置让你秒变专家

第一章:Cilium监控日志的核心价值与挑战在云原生环境中,网络可见性是保障系统稳定性和安全性的关键。Cilium 作为基于 eBPF 技术的高性能网络和安全解决方案,提供了深度的网络流量洞察能力。其监控日志不仅记录了 Pod 间的通信行为&#xff0…

作者头像 李华
网站建设 2026/4/18 8:30:51

随着人们物质生活的改善和欣赏能力的提高,观赏鱼缸之类的工艺产品逐渐进入了家庭和宾馆、商场等公共场所。但是,目前市场上的观赏鱼缸的水温检测、液位控制、水循环、喂食等操作都需要人为的手工进行,这就给人

本人从事毕业论文设计辅导10余载,撰写的毕业论文超2000余篇,为广大的应届毕业生节省了大量的设计和撰写时间。在单片机领域,参与设计51系列、STM32系列、Proteus仿真、JAVA上位机、Android Studio、物联网无线通信等千余套项目,具…

作者头像 李华
网站建设 2026/5/2 5:25:00

Docker Cilium日志输出实战指南(从零搭建可观测性体系)

第一章:Docker Cilium日志输出概述Cilium 是一款基于 eBPF 技术的高性能容器网络和安全解决方案,广泛应用于 Kubernetes 和 Docker 环境中。在实际运维过程中,日志输出是排查网络策略异常、连接失败或安全事件的关键手段。Docker 与 Cilium 集…

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

基于多技术栈融合的婚恋交友系统设计与实现——以LINK婚恋系统为例

摘要:本文详细阐述了基于SpringBoot、MybatisPlus、Shiro、Netty、WebSocket、RabbitMQ、jwt、Redis、Vue3、Uniapp等多技术栈融合的LINK婚恋交友项目的系统设计与实现。通过对系统功能、技术特点、架构设计等方面的深入剖析,展示了该系统在婚恋交友领域…

作者头像 李华
网站建设 2026/4/18 8:47:43

【Docker Cilium日志输出全攻略】:掌握高效日志采集与排错技巧

第一章:Docker Cilium日志输出的核心价值与架构解析Cilium 是一款基于 eBPF 技术构建的高性能容器网络和安全解决方案,广泛应用于 Kubernetes 和 Docker 环境中。其日志输出机制不仅提供网络流量的可观测性,还为故障排查、安全审计和策略调试…

作者头像 李华
网站建设 2026/5/1 15:45:07

GitHub镜像站推荐列表:快速获取VibeThinker及其他AI资源

GitHub镜像站推荐列表:快速获取VibeThinker及其他AI资源 在当前AI技术飞速演进的背景下,大模型固然耀眼,但真正能落地、可部署、低成本运行的小模型,正在悄然改变开发者的工作方式。尤其是面对编程竞赛、数学推理这类高度结构化的…

作者头像 李华