如何在第一个子流程停止时退出主脚本?

时间:2017-10-30 03:46:59

标签: bash

在后台运行有很多三个进程(proc1~3.sh)。当其中一个程序退出错误时,我想退出/停止所有这些程序。这是我的简单方法,但它仍然存在以下问题:

  1. 退出错误时无法阻止其他后台程序
  2. 当第一个后台处理退出错误时,它无法停止。
  3. 示例脚本是:

    #!/bin/bash
    set -e
    proc1.sh &
    pid1=$!
    proc2.sh &
    pid2=$!
    proc3.sh &
    pid3=$!
    
    if ! wait $pid1 ; then
      echo "Err: proc1 stopped"
      exit 1
    fi
    
    if ! wait $pid2 ; then
      echo "Err: proc2 stopped"
      exit 1
    fi
    
    if ! wait $pid3 ; then
      echo "Err: proc3 stopped"
      exit 1
    fi
    

1 个答案:

答案 0 :(得分:3)

解决方案是使用Math.round()

GNU parallel
  • parallel -j3 --halt 2 bash ::: proc[1-3].sh 并行运行3个作业
  • -j3在第一个作业失败并退出剩余正在运行的作业时退出