我正在尝试编写一个分叉两个后台服务器进程(其终止意味着问题)的 bash 脚本,并且一旦其中一个终止(而不等待另一个),该脚本就会退出。
这是我到目前为止所尝试的:
尝试 1
使用 bashwait
指令。这不起作用,因为它仍在等待两个进程完成。就我而言,我正在运行两个服务器进程,所以如果它们完成,则意味着出现问题,所以我应该完全退出这个脚本。
#!/usr/bin/env bash
set -e
./server1 &
pid1="$!"
./server2 &
pid1="$!"
wait "$1"
wait "$2"
尝试 2
与上面相同,但只是说wait
没有指定 pid。做同样的行为。
...
pid2="$!"
wait
尝试 3
我尝试使用子壳并从那里退出。但是这exit
仅适用于子外壳,所以我们仍然等待两个后台进程完成:
#!/usr/bin/env bash
set -e
( ./server1 || echo crash1; exit 1 ) &
( ./server2 || echo crash2; exit 2 ) &
wait
有没有办法在 bash 中实现这一点(在后台分叉两个服务器进程,并在其中一个完成后立即退出)?
来自:
help wait
_bash
使用
wait -n
将等待下一个作业终止。这意味着如果您的两个后台作业中的任何一个终止,对的调用wait -n
将返回。您将获得该作业的退出状态作为 的退出状态wait -n
,但您不知道哪个作业终止了。的
-n
选项wait
已添加到bash-4.3-alpha
.