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这一套作业控制工具,可以显著提高命令行工作效率,特别是在处理长时间运行的任务时。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1118541.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网易新闻专题:聚焦VibeThinker背后的年轻研发团队

VibeThinker:当15亿参数的小模型解开奥数题 在AI竞赛的赛道上,大家似乎早已默认“更大就是更强”——千亿参数、万卡集群、动辄上百万美元的训练成本。然而,一款名为 VibeThinker-1.5B-APP 的模型却悄然打破了这一共识。它只有15亿参数&#…

【Docker私有仓库性能优化】:提升拉取速度300%的配置秘诀

第一章:Docker私有仓库性能优化概述在构建企业级容器化基础设施时,Docker私有仓库作为镜像存储与分发的核心组件,其性能直接影响CI/CD流水线的效率和部署响应速度。随着镜像数量增长和并发拉取请求增多,未优化的私有仓库可能出现高…

Shell Daily 2026-01-06: 精准提取 (Grep Only)

Shell Daily 2026-01-06: 精准提取 (Grep Only) 在日志分析中,我们经常面临这样的需求:只想把日志里的 IP 地址、订单号或 URL 单独抠出来。 为了达到这个目的,很多人的肌肉记忆是“组合拳”:先用 grep 过滤行,再…

35+程序员转型指南:大模型岗位薪资与路径全解析,揭秘破局关键,助你职场逆袭!

对于大多数程序员而言,职业发展到一定阶段,必然会遭遇转型的十字路口。这一关键节点的选择,往往决定了后续5-10年的职业高度,而转型方向无外乎三大主流:技术深耕升级、管理岗位跃迁、自主创业突围。 从初入职场的代码…

Linux bind 命令详解

Linux bind 命令详解bind 是 Bash shell 的内置命令,用于管理键盘快捷键和命令行编辑功能。它允许你自定义按键绑定,增强命令行操作效率。基本概念bind 主要用于:绑定按键序列到函数绑定按键序列到宏查看当前绑定设置管理 Readline 库配置基本…

合同条款冲突检测:自动识别潜在矛盾点

合同条款冲突检测:自动识别潜在矛盾点 在企业日常运营中,合同审查是一项高频且高风险的任务。一份看似普通的采购协议,可能因付款周期的细微差异引发后续纠纷;两个版本接近的框架协议,也可能在责任划分上埋下法律隐患。…

高密度训练策略揭秘:如何让小模型发挥出大性能

高密度训练策略揭秘:如何让小模型发挥出大性能 在AI竞赛日益激烈的今天,参数规模似乎成了衡量模型能力的“硬通货”——百亿、千亿级大模型轮番登场,动辄消耗百万美元算力预算。然而,就在这种“越大越好”的主流叙事下&#xff0c…

vue大文件上传的多平台部署与性能优化策略

北京码农の10G文件上传奇遇:在胡同里写信创代码 各位好,我是老张,北京中关村某软件公司“脱发攻坚队”队长。最近接了个政府项目,要求上传10G文件,还必须兼容信创环境并提供全套文档——这活儿就像在故宫里装Wi-Fi&am…

为什么你的容器假死?,深度解析健康检查失效根源与修复方案

第一章:为什么你的容器假死?在 Kubernetes 或 Docker 环境中运行容器时,开发者常遇到“容器仍在运行但服务无响应”的现象,这被称为“容器假死”。其根本原因并非容器进程崩溃,而是主进程陷入阻塞、资源耗尽或健康检查…

参数仅15亿却胜过大模型,VibeThinker凭什么做到?

参数仅15亿却胜过大模型,VibeThinker凭什么做到? 在大模型动辄千亿参数、训练成本动辄数百万美元的今天,一个仅1.5B(15亿)参数的小模型,居然能在数学推理和编程竞赛题上击败比它大几十倍的“庞然大物”——…

实验性发布意味着什么?关于VibeThinker的定位解读

实验性发布意味着什么?关于VibeThinker的定位解读 在大模型军备竞赛愈演愈烈的今天,我们似乎已经习惯了“千亿参数起步”“万亿token训练”的宏大叙事。GPT、Claude、通义千问这些庞然大物不断刷新着性能上限,但也把算力门槛推到了普通人难以…

生产管理系统哪个好?推荐这几款 - 企业数字化观察家

生产管理,是制造企业的“心脏”。管得好,效率飙升、成本直降;管不好,到处卡壳、漏洞百出。故而面对市场上琳琅满目的生产管理系统(MES/ERP等),很多老板和工厂负责人都会头疼:到底生产管理系统哪个好? 是选国际…

作弊检测系统增强:分析操作模式识别异常行为

作弊检测系统增强:分析操作模式识别异常行为 在各类在线编程竞赛、自动化评测平台和远程考试场景中,AI辅助解题的普及正在悄然改写“公平竞争”的边界。过去,判断是否作弊主要依赖答案比对——只要结果正确,过程往往被忽略。但如今…

如何快速将文件生成专属二维码?文件生成二维码指南

在日常工作与生活中,我们经常需要分享文档、PDF、表格、PPT 或压缩包等文件。传统的发送方式依赖邮箱、网盘链接或即时通讯工具,不仅步骤繁琐,还可能受平台限制。其实,只需将文件生成二维码,对方扫码即可直接下载或在线…

c语言复习

scanf零,scanf是以行输入的输入是以行进行的,也就是每有一个scanf行输入一个回车scanf输入时需要注意的点如果一次输入如多个数据,则需要按照分割参数的方法分割开输入的数据使用scanf_s读取三个整数,输入时需要严格匹配格式字符串…

结构化推理场景首选:VibeThinker-1.5B应用案例解析

VibeThinker-1.5B:小模型如何打赢高难度推理战? 在大模型动辄数百亿、上千亿参数的今天,一个仅15亿参数的“小个子”却频频在数学竞赛和编程挑战中击败巨无霸——这听起来像极了AI领域的“田忌赛马”。而主角正是微博开源的实验性模型 VibeTh…

如何将照片合集制成二维码?图片生成二维码指南

在分享旅行回忆、活动花絮、产品图集或家庭相册时,一张张发送照片既繁琐又占空间。其实,只需一个二维码,就能把整套照片打包分享给他人——对方扫码即可在线浏览全部图片,无需下载多个文件。本文将为您介绍如何快速将照片合集制作…

2026年深圳宝安区及大湾区跨境电商园区终极推荐指南:3大产业园深度解析与选择策略 - 品牌2026

对于计划在2026年拓展全球业务的跨境电商企业、正在寻找理想产业基地的创业者、或是急需高效会展与活动场地的峰会举办方而言,选择一个合适的跨境电商产业园,是决定出海效率、成本控制与资源链接深度的关键第一步。面…

揭秘Docker容器网络日志难题:Cilium如何实现精准日志输出

第一章:Docker容器网络日志的挑战与Cilium的崛起在现代云原生架构中,Docker容器的广泛应用使得网络通信日益复杂。传统的容器网络模型依赖于iptables进行流量管理,但随着服务数量的增长,规则膨胀导致性能下降,且难以实…

vue大文件上传的示例代码与源码解析分享

大文件传输系统设计方案(基于SM4国密算法) 需求分析 作为四川某软件公司的开发人员,我面临以下核心需求: 实现10GB级别大文件的分片上传/下载采用国密SM4算法进行端到端加密服务端需支持SM4加密存储兼容主流浏览器及信创国产化…