bash – 并行运行多个命令,并在其中一个命令失败或所有命令都成
发布时间:2020-12-15 22:38:55 所属栏目:安全 来源:网络整理
导读:我见过以下问题: Bash run two commands and get output from both几乎可以满足我的需求. 但是,wait命令是阻塞的,这意味着如果命令2在命令1成功之前失败,则命令2失败但命令1成功时命令不会返回. 是否可以并行运行多个命令,并且只要其中一个命令失败就返回1,
我见过以下问题:
Bash run two commands and get output from both几乎可以满足我的需求.
但是,wait命令是阻塞的,这意味着如果命令2在命令1成功之前失败,则命令2失败但命令1成功时命令不会返回. 是否可以并行运行多个命令,并且只要其中一个命令失败就返回1,如果所有命令都成功则返回0(并尽快返回)? 如果使用标准命令(如xargs或并行)可能会更好,但如果使用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 有关代码的说明,请参阅注释. 子作业在其长时间工作失败的情况下向父母发送信号,并且父母在等待之后向其子女发送信号(父母接收到等待立即返回的信号) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |