gpt4 book ai didi

bash - 并行运行多个命令,并在其中一个失败或全部成功时返回

转载 作者:行者123 更新时间:2023-11-29 09:06:07 28 4
gpt4 key购买 nike

我看到了以下问题:Bash run two commands and get output from both这几乎满足了我的需要。

但是,等待命令是阻塞的,这意味着如果命令 2 在命令 1 成功之前失败,则命令不会在命令 2 失败时返回,而仅在命令 1 成功时返回。

是否可以并行运行多个命令,并在其中一个失败时返回 1,如果所有命令都成功则返回 0(并尽快返回)?

如果可以使用标准命令(如 xargs 或 parallel),那就更好了,但如果使用 bash 编写也可以。

最佳答案

此代码给出正确的退出代码,并杀死幸存者进程:

#/bin/bash

# trap for SIGTERM and set RET_VALUE to false
trap "RET_VAL=false" SIGTERM

MY_PID=$$
# Initialize RET_VALUE to true
RET_VAL=true

# This function will executed be in a separate job (see below)
thread_listener() {
# Starts the long time job
./longJob.sh &
PID=$!
# trap for sigterm and kill the long time process
trap "kill $PID" SIGTERM
echo waiting for $PID
echo Parent $MY_PID
# Send a SIGTERM to parent job in case of failure
wait $PID || kill $MY_PID
exit
}

echo $MY_PID

# Runs thread listener in a separate job
thread_listener &
PID1=$!

# Runs thread listener in a separate job
thread_listener &
PID2=$!

wait
# send sigterm to PID1 and PID2 if present
kill $PID1 2> /dev/null
kill $PID2 2> /dev/null
# returns RET_VALUE
$RET_VAL

有关代码的解释,请参阅注释。诀窍是启动能够在需要时接受或向父作业发送信号的作业。

如果长时间作业失败,子作业会向父作业发送信号,等待后父作业会向其子作业发送信号(如果父作业收到等待立即返回的信号)

关于bash - 并行运行多个命令,并在其中一个失败或全部成功时返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32248808/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com