首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在Bash中等待多个子进程完成,并且当其中任何一个子进程以非零退出状态结束时,使主进程也返回一个非零的退出码?

问题 如何在 Bash 脚本中等待该脚本启动的多个子进程完成,并且当这其中任意一个子进程以非零退出码结束时,让该脚本也返回一个非零的退出码? 简单的脚本: #!...我应该如何修改这个脚本,使其能检测到被创建子进程的退出状态,并且当任何子进程以非零代码结束时,让脚本返回退出码 1?...回答 根据 Luca Tettamanti 和 Gabriel Staples 的回答,编写一个完整的可以运行的演示代码: #!.../usr/bin/env bash # 这是一个特殊的 sleep 函数,它将睡眠的秒数作为"错误代码" # 或"返回代码"返回,以便我们可以清楚地看到,实际上 # 我们在每个进程完成时确实获取了它的返回代码...3") num_procs=${#procs[@]} # 数组中元素的个数 echo "num_procs = $num_procs" # 作为子进程运行命令并把 pid 存储到数组中 pids

11500

使用Docker容器

在本教程中,我们将简要概述Docker镜像与Docker容器之间的关系。然后,我们将更详细地了解如何运行,启动,停止和删除容器。...exit Docker容器在它们发出的命令完成后立即停止运行,因此当我们退出bash shell时,我们的容器停止了。如果我们运行docker ps,显示正在运行的容器的命令,我们将看不到我们的。...ps -a显示这些值,以及构建容器的图像(ubuntu),创建容器时(six minutes ago)以及在其中运行的命令(/bin/bash)。...请务必在以下命令中替换容器的ID: docker start -ai 11cc47339ee1 我们再次发现自己处于容器的bash提示符中,当cat我们之前创建的文件时,它仍然存在。...cat /tmp/Example1.txt Example1 我们现在可以退出容器了: exit 此输出显示容器内的更改通过停止和启动而持续存在。只有在删除容器时才会删除内容。

1.2K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Docker学习笔记

    Ctrl + p + q #容器不停止退出docker exec -it 容器id /bin/bash复制代码??...三、Docker镜像 镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件 所有应用直接打包docker...docker run -it -v 主机目录:容器内目录 镜像 /bin/bash 复制代码 可以使用多个-v?...,可以追加命令ONBUILD #当构建一个被继承dockerfile这个时候就会运行ONBUILD指令COPY #类似add,将我们的文件拷贝到镜像中ENV #构建的时候设置环境变量复制代码...DockerHub中99%的镜像从scratch这个基础镜像开始构建,然后配置需要的软件和相关配置?

    63420

    Jenkins-项目应用

    项目之间总有依赖,比如A项目执行完再执行B项目,如图所示,如何建立依赖关系?...然后我们执行A构建,B也会在A构建完成后,进行构建。 2、按指定顺序执行多个项目 如图所示:有A、B、C三个项目,现要单独创建一个项目,按照B、C、A的顺序进行构建。...4、创建节点进行分布式构建 Jenkins有个很强大的功能:分布式构建(在Jenkins的配置中叫做节点),分布式构建能够让同一套代码在不同的环境(如:Windows和Linux系统等)中编译、测试等...而且Jenkins构建的代码和产物最后自动拷贝到主节点上。 一、开启Java Web Start Agent Protocol。 1、系统管理--->全局安全配置。...2、执行项目(Test_Python_Demo),可以看到项目在node节点上进行构建。 控制台输出,显示在远程节点node上构建项目。

    95820

    Docker 入门手册

    构建指令:用于构建 image,其指定的操作不会在运行image的容器上执行; 设置指令:用于设置 image 的属性,其指定的操作将在运行image的容器中执行。...该操作可以是执行自定义脚本,也可以是执行系统命令。该指令只能在文件中存在一次,如果有多个,则只执行最后一条。...(设置container启动时执行的操作) 设置指令,指定容器启动时执行的命令,可以多次设置,但是只有最后一个有效。...当独自使用时,如果你还使用了CMD命令且CMD是一个完整的可执行的命令,那么CMD指令和ENTRYPOINT会互相覆盖只有最后一个CMD或者ENTRYPOINT有效。...我们知道容器使用的是AUFS,这种文件系统不能持久化数据,当容器关闭后,所有的更改都会丢失。当容器中的应用有持久化数据的需求时可以在Dockerfile中使用该指令。

    68010

    Docker使用

    在构建Docker Image时,会一层层进行,每一层构建完就不会再发生改变。创建Docker镜像,首先需要从Docker Hub上拉取相应的基础镜像,然后在此基础上执行命令来创建新的镜像。...镜像操作指令:这包括诸如RUN、COPY、ADD等命令,这些命令会在构建镜像的过程中执行。例如,使用RUN命令来安装软件或更新包。4. 容器启动时执行指令:这一部分的内容会在容器启动时自动执行。...例如,使用CMD命令来指定运行容器时的操作命令。5. 如何使用Docker Compose编排多个容器?Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。...例如,当我们执行一条 docker commit 命令时,就会在当前容器的文件系统中创建一个新的层,然后将这个新的层添加到镜像中。...当容器的健康状态发生变化时,Docker Engine会发出一个health_status事件。在Dockerfile中,也可以声明HEALTHCHECK指令以在构建镜像时就定义好健康检查机制。

    32730

    云时代Docker原理万字详解!!!

    构建指令:用于构建 image,其指定的操作不会在运行image的容器上执行; 设置指令:用于设置 image 的属性,其指定的操作将在运行image的容器中执行。...该操作可以是执行自定义脚本,也可以是执行系统命令。该指令只能在文件中存在一次,如果有多个,则只执行最后一条。...(设置container启动时执行的操作) 设置指令,指定容器启动时执行的命令,可以多次设置,但是只有最后一个有效。...当独自使用时,如果你还使用了CMD命令且CMD是一个完整的可执行的命令,那么CMD指令和ENTRYPOINT会互相覆盖只有最后一个CMD或者ENTRYPOINT有效。...我们知道容器使用的是AUFS,这种文件系统不能持久化数据,当容器关闭后,所有的更改都会丢失。当容器中的应用有持久化数据的需求时可以在Dockerfile中使用该指令。

    55610

    Docker与Docker Compose入门:释放你的应用部署的威力

    容器是轻量级的,它们共享主机操作系统的内核,因此可以更高效地运行多个容器。 Dockerfile :Dockerfile 是一个文本文件,用于定义如何构建 Docker 镜像。...:停止一个或多个容器的运行。例如:docker stop my_container。 docker build [OPTIONS] PATH:根据指定的 Dockerfile 构建一个镜像。...,这将使用当前目录中的 Dockerfile 构建一个名为 my_image 的镜像。 docker rm CONTAINER [CONTAINER...]:删除一个或多个容器。...docker exec :在容器中执行指定的命令。例如:docker exec -it my_container bash。...该命令将会检查并构建镜像(如果需要),然后启动相关的容器。up 命令后常跟 -d 选项,用于后台运行应用程序,而不是在命令行中显示日志输出。

    90320

    Docker容器详解

    构建指令:用于构建image,其指定的操作不会在运行image的容器上执行; 设置指令:用于设置image的属性,其指定的操作将在运行image的容器中执行。...该操作可以是执行自定义脚本,也可以是执行系统命令。该指令只能在文件中存在一次,如果有多个,则只执行最后一条。...当独自使用时,如果你还使用了CMD命令且CMD是一个完整的可执行的命令,那么CMD指令和ENTRYPOINT会互相覆盖只有最后一个CMD或者ENTRYPOINT有效。...我们知道容器使用的是AUFS,这种文件系统不能持久化数据,当容器关闭后,所有的更改都会丢失。当容器中的应用有持久化数据的需求时可以在Dockerfile中使用该指令。...如果想要删除容器时,同时删除掉其数据盘,那么可以使用-v参数。 docker rm -v newnginx 网络 ? Docker提供几种网络,它决定容器之间和外界和容器之间如何去相互通信。

    80021

    linux的进程介绍与前后台任务切换

    举例来说,我们可以利用 touch 来建立一个空的文件,当 root 执行这个 touch 指令时,他取得的是 UID/GID = 0/0 的权限,而当 xiaoqi (UID/GID=1000/1000...,执行者的权限与属性、程序的程序代码与所需数据等都会被加载内存中,操作系统并给予这个内存内的单元一个标识符 (PID),可以说,进程就是一个正在运作中的程序。...而当这一个指令 (cp file1 file2) 执行完毕之后,系统将会在你的终端接口显示完成的消息!很便利喔!...直接将指令丢到背景中『执行』的 & 如同前面提到的,我们在只有一个 bash 的环境下,如果想要同时进行多个工作,那么可以将某些工作直接丢到背景环境当中,让我们可以继续操作前景的工作!...至于后面那个 1390 则是该指令所触发的『 PID 』了!而且,有趣的是,我们可以继续操作 bash 呢!不过,那么丢到背景中的工作什么时候完成?完成的时候会显示什么?

    1.5K30

    Docker是什么鬼?Docker容器详解

    : docker exec # 在容器里执行一个命令,可以执行bash进入交互式 镜像操作: docker images # 显示本地所有的镜像列表docker import # 从一个tar包创建一个镜像...构建指令:用于构建image,其指定的操作不会在运行image的容器上执行; 设置指令:用于设置image的属性,其指定的操作将在运行image的容器中执行。...该操作可以是执行自定义脚本,也可以是执行系统命令。该指令只能在文件中存在一次,如果有多个,则只执行最后一条。...当独自使用时,如果你还使用了CMD命令且CMD是一个完整的可执行的命令,那么CMD指令和ENTRYPOINT会互相覆盖只有最后一个CMD或者ENTRYPOINT有效。...我们知道容器使用的是AUFS,这种文件系统不能持久化数据,当容器关闭后,所有的更改都会丢失。当容器中的应用有持久化数据的需求时可以在Dockerfile中使用该指令。

    81810

    docker常用命令详解

    docker ps 默认显示当前正在运行中的container docker ps -a 查看包括已经停止的所有容器 docker ps -l 显示最新启动的一个容器(包括已停止的) 示例 [devadmin...需要注意的是,默认有一个–rm=true参数,即完成操作后停止容器并从文件系统移除。因为Docker的容器实在太轻量级了,很多时候用户都是随时删除和新创建容器。...查看image或container的底层信息(inspect) inspect的对象可以是image、运行中的container和停止的container。...container时(即便已经停止),也无法删除镜像; TO-DO 如何查看镜像与容器的依存关系 删除容器 docker rm 删除所有停止的容器...docker ps 默认显示当前正在运行中的container docker ps -a 查看包括已经停止的所有容器 docker ps -l 显示最新启动的一个容器(包括已停止的) 8.

    88520

    docker常用命令详解

    docker ps 默认显示当前正在运行中的container docker ps -a 查看包括已经停止的所有容器 docker ps -l 显示最新启动的一个容器(包括已停止的) 示例 [devadmin...需要注意的是,默认有一个–rm=true参数,即完成操作后停止容器并从文件系统移除。因为Docker的容器实在太轻量级了,很多时候用户都是随时删除和新创建容器。...查看image或container的底层信息(inspect) inspect的对象可以是image、运行中的container和停止的container。...container时(即便已经停止),也无法删除镜像; TO-DO 如何查看镜像与容器的依存关系 删除容器 docker rm 删除所有停止的容器...docker ps 默认显示当前正在运行中的container docker ps -a 查看包括已经停止的所有容器 docker ps -l 显示最新启动的一个容器(包括已停止的) 8.

    84820

    《Linux命令行与shell脚本编程大全》第十六章 控制脚本

    可以在脚本中加入识别信号的代码,并执行命令来处理信号。 16.1.2 生成信号 bash shell允许用键盘上的组合键生成两种进本的linux信号。...注意:后台进程运行时,任然会使用终端显示器来显示STDOUT和STDERR消息。 所以可以将后台运行的程序的STDOUT和STDERR进行重定向。...16.2.2 运行多个后台作业 同时启动多个后台作业就可以了。 在终端会话中使用后台进程要注意,ps命令的输出中,每一个后台进程都和终端会话(pts/0)终端联系在一起。...带加号+的:当做默认作业(被当成作业控制命令的操作对象) 默认作业完成后,执行下一个作业(带减号-的)。任何时候都只有一个带加号和一个带减号的作业。 还可以这样: 用kill杀死当前默认作业。...当有多个作业时必须加上作业号。 实例: ? Ctrl + Z停止作业。 注意:bg 重启后是后台作业,ctrl + c 是接受不到的。 以前台模式重启作业,可用带作业号的fg命令。

    3K61

    The Missing Semester of Your CS Education

    每当你执行 marco 时,当前的工作目录应当以某种形式保存,当执行 polo 时,无论现在处在什么目录下,都应当 cd 回到当时执行 marco 的目录。...,确实感觉有点烦 Command-line Environment 学习如何同时执行多个不同的进程并追踪它们的状态、如何停止或暂停某个进程以及如何使进程在后台运行,学习一些能够改善您的 shell 及其他工具的工作流的方法...当一个进程接收到信号时,它会停止执行、处理该信号并基于信号传递的信息来改变其执行。就这一点而言,信号是一种软件中断。 当我们输入 Ctrl-C 时,shell 会发送一个SIGINT 信号到进程。...终端多路复用 当您在使用命令行时,您通常会希望同时执行多个任务。举例来说,您可以想要同时运行您的编辑器,并在终端的另外一侧执行程序。...当您的程序需要执行一些只有操作系统内核才能完成的操作时,它需要使用 系统调用。有一些命令可以帮助您追踪您的程序执行的系统调用。

    2K21

    写给前端同学的终端修炼手册

    如果我们使用VS Code作为代码编辑器,VS Code内置了一个强大的现代终端。我们的代码和终端可以在同一个应用程序中并排运行。...我们可以参考此篇文章 - 如何在 Windows 10 上安装和使用 Zsh[4] 一旦设置完成,我们就可以配置终端应用程序使用 Bash 或 Zsh。...$ 你还需要知道的知识点 在 Bash Shell 中,$ 符号有多个作用,具体作用取决于上下文。 命令提示符: 当打开终端时,看到的 符号通常是命令提示符,表示 shell 已准备好接受命令。...和前端相关的终端操作 到目前为止,我们已经看到了一些如何在终端中完成任务的示例。接下来,我们来看看和前端相关的终端操作。 管理依赖 假设这是我们在新公司的第一天。...方法如下: npm install && npm run start && 操作符允许我们将多个命令链接在一起。第一个命令会执行 npm install。一旦完成,第二个命令会自动运行。

    14510

    Docker Compose 安装及使用教程

    从功能上看,跟 OpenStack 中的 Heat 十分类似。 其代码目前在 https://github.com/docker/compose 上开源。...通过第一部分中的介绍,我们知道使用一个 Dockerfile 模板文件,可以让用户很方便的定义一个单独的应用容器。然而,在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。...config 验证 Compose 文件格式是否正确,若正确则显示配置,若格式错误显示错误原因。 down 此命令将会停止 up 命令所启动的容器,并移除网络 exec 进入指定的容器。...该命令十分强大,它将尝试自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一系列操作。 链接的服务都将会被自动启动,除非已经处于运行状态。...默认情况,docker-compose up 启动的容器都在前台,控制台将会同时打印所有容器的输出信息,可以很方便进行调试。 当通过 Ctrl-C 停止命令时,所有容器将会停止。

    11.1K11

    docker 常用命令总结

    · 使用dokcer加速本地开发和构建,开发人员可以构建、运行并分享Docker容器,容器可以在开发环境中构建,然后轻松地提交到测试环境中,并最终进入生产环境 · 能够让独立服务或应用程序在不同环境中...在一个新的容器中执行一条命令 search 在 Docker Hub 中搜索镜像 start 启动一个或多个已经停止运行的容器 stats...显示一个容器的实时资源占用 stop 停止一个或多个正在运行的容器 tag 为镜像创建一个新的标签 top 显示一个容器内的所有进程 unpause...这个进程是该容器的唯一进程,所以当该进程结束的时候,容器也会完全的停止。...你可以在同一时间attach同一个容器。你也可以从一个容器中脱离出来,是从CTRL-C. 保存和加载镜像 当需要把一台机器上的镜像迁移到另一台机器的时候,需要保存镜像与加载镜像。

    78930
    领券