Linux wait 命令详解:等待后台进程与作业执行完毕后再继续(bash 内建命令)

发布时间:2026/10/3 8:19:04
Linux wait 命令详解:等待后台进程与作业执行完毕后再继续(bash 内建命令) 文档教程【免费下载链接】linux-commandLinux命令大全搜索工具内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux项目地址https://gitcode.com/GitHub_Trending/linux/linux-command点击查看免费下载wait是 bash 内置的作业控制命令用于阻塞当前 shell直到指定的后台进程或作业执行完毕后才返回。本文以 command/wait.md 为核心系统讲解wait的语法、参数、典型用法并结合 command/jobs.md、command/bg.md、command/fg.md、command/disown.md 等作业控制命令给出 shell 脚本中可复制、可运行的实战示例。读完本文你将掌握如何用wait精确控制后台任务的完成时机编写可靠的多进程并行脚本。wait 命令是什么wait是一个 bash 内建命令builtin它的作用是等待指定进程或作业执行完毕直到其结束运行后才继续执行后续命令。这在 shell 脚本编程中非常常见当脚本先后台启动了多个任务又需要在所有或某个任务完成后才能进行下一步处理时wait就是最直接的工具。与sleep按指定时长暂停见 command/sleep.md不同wait不是等多久而是等什么——它不依赖固定的时间而是以目标进程/作业的实际完成时刻为边界。只要目标没有结束调用wait的 shell 就会一直阻塞。一个关键规则原文档明确强调使用wait等待作业时作业标识号前必须添加百分号%例如wait %1而等待进程时则直接写进程号PID例如wait 27156。语法与参数原文档给出的语法为wait(参数)其参数是进程或作业标示既可以指定进程号PID也可以指定作业号jobspec。从 bash 的完整形式看wait还可接收多个参数并支持可选选项wait [-fn] [jobspec ... | pid ...]jobspec作业标识符等待对应作业完成。等待作业时必须在作业号前加%如wait %1。pid进程号等待该进程完成如wait 27156。若不提供任何参数则等待当前 shell 的所有后台任务全部完成这也是脚本中最常用的形式。-f与-n等选项用于调整等待行为不同 bash 版本细节略有差异可通过help wait查看当前环境的完整说明。wait的返回值是被等待进程/作业的退出状态exit status如果目标进程是被信号终止的则返回128 信号编号若发生错误如指定的作业或进程不存在则返回失败状态。实战等待指定作业完成%作业号原文档给出的第一个实例是等待作业号为 1 的作业完成。首先在后台运行一个sleep进程sleep 10s [1] 27156命令执行后输出[1] 27156其中[1]是作业号job number27156是后台进程的PID。随后使用wait指定作业号等待它完成wait %1 #等待作业号为1的作业完成 [1] Done sleep 10s注意wait %1中作业号前加了%这是等待作业与等待进程在写法上的核心区别。sleep 10s结束后shell 输出[1] Done sleep 10s的完成通知wait随即返回。实战等待指定进程完成PID除了作业号wait也接受进程号。原文档给出的第二种用法wait 27156 [1] Done sleep 10s这里直接传入后台任务的 PID27156效果与wait %1等价——两者指向同一个后台任务只是标识方式不同。在脚本中更常见的写法是使用$!自动获取最近一个后台进程的 PID无需手动记录#!/bin/bash ./long_task.sh pid$! # $! 保存刚启动的后台进程 PID wait $pid # 等待该任务完成 echo 任务已结束实战等待所有后台任务完成不指定任何参数时wait会等待当前 shell 启动的所有后台任务全部结束。这在并行启动多个任务、统一收尾的场景中非常实用#!/bin/bash # 同时启动三个后台任务 sleep 5 sleep 3 sleep 8 # 阻塞直到上面三个任务全部完成 wait echo 全部后台任务执行完毕脚本会在此处停留约 8 秒取决于最后一个任务随后输出全部后台任务执行完毕。这正是原文档所说待指定的指令执行完成后才会继续执行后面的任务的典型体现。等待的返回值与信号语义wait返回被等待目标的退出状态因此它还可以作为脚本分支判断的依据。例如#!/bin/bash curl -s https://example.com/data.json data.json wait $! echo 下载成功 || echo 下载失败退出码 $?当后台任务因收到信号而终止时wait返回128 信号编号。这与 command/kill.md 中介绍的信号机制一致例如任务被SIGKILL信号 9杀死wait返回 137。利用这一特性可以识别后台任务是被正常退出还是被信号中断。与作业控制命令的配合使用wait并非孤立存在它属于 bash 的作业控制命令家族。bash 的作业控制命令包括bg、fg、kill、wait、disown、suspend这一结论在 command/jobs.md、command/bg.md、command/fg.md 等文档中反复出现它们共同构成了对前后台任务的管理闭环命令作用仓库文档jobs显示当前 shell 的作业状态-l可同时列出 PID-r/-s筛选运行/停止状态command/jobs.mdbg将暂停Stopped的作业放到后台继续运行等价于命令末尾加command/bg.mdfg将后台作业调回前台终端运行command/fg.mdwait阻塞等待指定作业/进程完成command/wait.mddisown从当前 shell 的作业表中移除作业避免 shell 退出时连带结束任务command/disown.mdsuspend挂起当前 shell 的执行直到收到SIGCONT信号command/suspend.mdkill向作业或进程发送信号如STOP、CONT、KILLcommand/kill.md完整的协作流程通常是用sleep 60 启动后台任务或用CtrlZ将前台任务暂停用jobs -l查看作业号与对应 PID输出格式参见 command/jobs.md用bg %1/fg %1调整前后台状态用wait %1或wait PID等待其结束如需让任务脱离 shell 生命周期管理可用disown。例如先暂停一个前台任务再恢复并等待sleep 60 ^Z [1] Stopped sleep 60 bg %1 # 让作业1在后台继续运行 [1] sleep 60 wait %1 # 等待作业1完成注意wait只能等待当前 shell 的作业/子进程。经过disown移出作业表、或被其他进程收养的任务不再受当前 shell 的wait管辖这也是 command/disown.md 示例中移除作业后任务仍继续运行的原因所在。在 shell 脚本中的典型应用场景一并行任务统一收尾如多文件并行下载、并行编译。#!/bin/bash for url in $(cat urls.txt); do wget -q $url done wait # 等待所有下载完成 echo 全部下载完成场景二以退出码驱动后续逻辑。#!/bin/bash run_backup backup_pid$! wait $backup_pid if [ $? -eq 0 ]; then echo 备份成功继续后续操作 else echo 备份失败终止流程 exit 1 fi场景三用sleep演示延时任务与wait的组合sleep支持2s/2m/2h/2d/infinity等时间后缀详见 command/sleep.md#!/bin/bash sleep 2 wait $! echo 2 秒延时结束使用前提与注意事项作业号前必须加%等待作业写wait %1等待进程写wait 27156两者不能混淆。这是原文档特别强调的规则。需要开启作业控制bash 的作业控制命令依赖set选项monitor处于开启状态。可用set -o查看monitor行确认用set -o monitor或set -m开启command/jobs.md 的注意事项中给出了相同说明。wait是内建命令帮助信息可通过help wait查看它属于 bash 内建命令体系而不是独立的外部程序。退出状态语义wait返回被等待目标的退出状态目标被信号终止时返回128 信号编号。只能等待自己的子进程wait无法等待非当前 shell 启动的进程这与作业表的管理范围一致。在 linux-command 项目中查阅与扩展本文内容以仓库中的 command/wait.md 为骨架整理。该仓库在 command 目录下收录了 600 多个 Linux 命令的 Markdown 手册文档详见 README.md并且可通过npm install linux-command安装 npm 包以编程方式读取任意命令的 Markdown 文本如require(linux-command/command/wait.md)与命令索引数据可通过仓库的 Web 版本在线搜索wait、jobs、bg等命令网页内容由这些 Markdown 文档构建生成每个命令文档都采用统一的概要—主要用途—选项—参数—例子—注意结构便于对照查阅。与wait关系最紧密的扩展阅读文档均在本仓库command目录下command/jobs.md查看作业状态、command/bg.md后台恢复、command/fg.md前台切换、command/disown.md移除作业、command/suspend.md挂起 shell、command/kill.md信号控制。掌握这一组命令就能在脚本与交互式终端中自如驾驭 Linux 的前后台任务与进程生命周期。赞分享文档教程【免费下载链接】linux-commandLinux命令大全搜索工具内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux项目地址https://gitcode.com/GitHub_Trending/linux/linux-command点击查看免费下载相关推荐fish-shell 内置命令 wait 完全指南等待后台任务完成的正确姿势fish shell 内置命令 wait 完全指南等待后台任务完成的正确姿势 导读 wait 是 fish shell 内置的作业控制命令用于等待一个或CLI开发工具linux-command 项目详解bash 内建命令 fc —— 历史命令的查看、编辑与替换执行linux command 项目详解bash 内建命令 fc —— 历史命令的查看、编辑与替换执行 导读 fc fix command是 bash 提供的文档教程linux-command 手册精读Bash 内建 suspend 命令详解——挂起与恢复 Shell 执行linux command 手册精读Bash 内建 suspend 命令详解——挂起与恢复 Shell 执行 本篇技术指南以 linux command 仓库文档教程上一篇Windows性能革命AtlasOS四大驱动优化工具智能调度解决方案下一篇终极Kronos金融预测模型5分钟构建专业量化策略的完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询