Bash:产生当父脚本退出时退出的子进程

2024-05-28

我想在 Bash 中生成多个子进程,但我希望父脚本保持运行,这样发送到父脚本的信号也会影响生成的子进程。

这不会这样做:

parent.bash:

#!/usr/bin/bash

spawnedChildProcess1 &
spawnedChildProcess2 &
spawnedChildProcess3 &

parent.bash立即结束,并且生成的进程继续独立运行。


如果您希望父母在生成其孩子后不立即退出,那么正如 Barmar 告诉您的那样,请使用wait.

现在,如果您希望子进程在父进程退出时终止,请向它们发送SIGTERM(或任何其他)退出前的信号:

kill 0

(0是一个特殊的PID,表示“父进程组中的每个进程”)

如果父进程可能意外退出(例如,在收到信号后,由于set -u or set -e等)然后你可以使用trap发送TERM在退出前向孩子发出信号:

trap 'kill 0' EXIT

[编辑] 总之,这就是你应该如何编写父进程:

#!/usr/bin/bash
trap 'kill 0' EXIT
...
spawnedChildProcess1 &
spawnedChildProcess2 &
spawnedChildProcess3 &
...
wait

这样就不需要将信号发送到负进程 ID,因为这不会涵盖父进程可能死亡的所有情况。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Bash:产生当父脚本退出时退出的子进程 的相关文章

  • 如何使用 mediawiki 的 api、curl 和 bash 登录?

    我对流程的理解 来自 mediawikis 登录手册https www mediawiki org wiki API 登录 https www mediawiki org wiki API Login 使用 MediaWiki 的 Web
  • 在 Bash 中监控 tomcat,直到它完成部署 war 或应用程序

    怎么可能Tomcat在 bash 脚本中进行监控以检测它是否完成了战争或应用程序的部署 应用场景 Tomcat 开始于systemd Tomcat 开始于catalina sh 使用 Tomcat 管理器 Tomcat从Eclipse启动
  • 正则表达式匹配bash变量

    我正在尝试修改 bash 脚本 当前脚本包含 print div class 1 div Where 1可能看起来像 Apprentice Historian Level 1 Historian Level 4 Master Histori
  • 替换多个文件中的多个字符串

    我有一个包含正则表达式列表和替换文字字符串的文件 格式如下 OLD REGEXP 1 NEW STRING 1 OLD REGEXP 2 NEW STRING 2 我想替换所有匹配的字符串OLD REGEXP X with NEW STRI
  • 使用.sh脚本设置环境变量

    如何编写 sh 脚本以在 Ubuntu 14 上全局设置环境变量 i e bin sh sets this in to master etc environment export DB HOST 123 我知道我可以运行这个脚本 它只会将其
  • 在 scp 的简单函数包装中使用波形符 ~ 时出现问题

    我想放置一个简单的bash功能在我的 bashrc围绕着scp通过接受 源 参数和 目标 参数来命令 到目前为止已经尝试过 function send eval scp 1 user annoyingly long server name
  • 通知管道右侧左侧故障?

    我越来越喜欢在 shell 脚本中的函数之间使用类似于生成器的模式 像这样的事情 parse commands da cmd file process commands 然而 这种模式的基本问题是 如果 parse command 遇到错误
  • 从 shell 脚本解析文件中的键/值的代码

    我有一个文件 需要使用 shell 脚本按键查找值 该文件如下所示 HereIsAKey This is the value 我怎样才能做类似的事情 MyVar Get HereIsAKey 然后 MyVar 应该等于 这就是值 键没有空格
  • bash:使用 scp 检查远程文件是否存在

    我正在编写一个 bash 脚本来将文件从远程服务器复制到本地计算机 我需要检查该文件是否可用 以便在该文件不存在时可以采取替代操作 我知道如何测试本地文件是否存在 但是 使用 scp 会使事情变得有点复杂 常识告诉我 一种方法是无论如何尝试
  • 通过 SSH 启动长时间运行的程序 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个运行 Ubuntu 的虚拟机 并且我可以通过 SSH 很好地连接到该虚拟机 我什至可以使用以下命令通过 SSH 启动我的 pyth
  • 为什么 sed 不将 \t 识别为制表符?

    sed s t 1 filename gt sedTmpFile mv sedTmpFile filename 我期待这个sed脚本插入一个tab在每一行前面 filename然而事实并非如此 由于某种原因 它正在插入一个t反而 Not a
  • Linux Bash - 日期格式

    我的日期格式是 yyyy mm dd hh mm ss 如何检查我的输入 它应该是这样的 bin bash read p Date format yy mm dd HH MM SS input check date Y m d H M S
  • 如何在 Mac OS X 中通过给出进程名称来获取进程的 PID?

    我正在编写一个脚本来监视任何给定进程的 CPU 和 MEM 为此 我需要将要监视的进程的名称作为命令行参数发送 例如 monitorscript
  • 为什么 bash for 循环出错?

    我正在尝试使用 for 循环运行以下代码 但出现语法错误 请帮忙 输入格式 输入的第一行包含一个整数N 表示整数的个数 下一行包含 N 个空格分隔的整数 它们构成数组 A read n sum 0 for i 1 i lt n i do r
  • cron 作业不适用于 xwindow

    我在 crontab 中有以下行 1 xeyes 它不显示任何 xwindow 但相反 1 touch somefile txt 工作正常 尝试在谷歌上搜索但没有得到任何具体答案 如果您运行的命令使用 X 服务器 您必须告诉 cron 在哪
  • 如何在shell脚本中扩展相对路径

    我正在编写一个脚本来使用 bash 在 linux 2 6 上设置环境变量 因此该脚本包含如下命令 export SRC DIR export LIBPATH SRC DIR lib 问题是 当我尝试 echo LIBPATH 时 它显示
  • 移动除一个文件之外的所有文件

    如何移动除一个文件之外的所有文件 我正在寻找类似的东西 mv Linux Old Tux png Linux New 我将旧的东西移动到新的东西文件夹中 除了Tux png 符号代表否定 有一些工具可以完成这项工作吗 如果您使用 bash
  • 在詹金斯管道作业中将变量传递给bash脚本

    我有一个 Jenkins 管道作业 其中我使用名为 setup sh 的 bash 脚本配置我的环境 如下所示 bin bash export ARCH 1 echo architecture ARCH 在 Jenkins 管道脚本中 我使
  • 使用 Bash 显示进度指示器(旋转器)[重复]

    这个问题在这里已经有答案了 使用仅 bash 的脚本 如何提供 bash 进度指示器 例如 当我从 bash 运行命令时 当该命令正在执行时 让用户知道某些事情仍在发生 在这个使用 SCP 的示例中 我演示了如何获取进程 ID pid 然后
  • 检测目录中是否有某些内容被修改,如果是,则备份 - 否则不执行任何操作

    我有一个 数据 目录 我通过 shell 脚本定期同步到远程 NAS 但是 我想让这变得更有效率 我想在运行 rsync 之前检测 数据 中是否发生了变化 这样我就不会不必要地唤醒 NAS 上的驱动器 我正在考虑修改 shell 脚本以获取

随机推荐