Shell:如何并行运行两个脚本 A 和 B 并在 A 结束时停止 B

Ric*_* Hu 1 linux parallel-processing bash shell

假设我有一个 shell 脚本,A.sh其内容是:

sleep 2
echo "A: 2s"
sleep 2
echo "A: 4s"
sleep 2
echo "A: 6s"
Run Code Online (Sandbox Code Playgroud)

我还有一个 shell 脚本,B.sh其内容是:

sleep 2
echo "B: 2s"
sleep 2
echo "B: 4s"
sleep 2
echo "B: 6s"
sleep 2
echo "B: 8s"
sleep 2
echo "B: 10s"
Run Code Online (Sandbox Code Playgroud)

当我希望并行运行 A 和 B 时,我创建了一个脚本,C.sh其内容为:

sh A.sh &
sh B.sh &
wait
Run Code Online (Sandbox Code Playgroud)

输出是:

B: 2s
A: 2s
A: 4s
B: 4s
A: 6s
B: 6s
B: 8s
B: 10s
Run Code Online (Sandbox Code Playgroud)

这样A和B就可以并行运行了。现在我还有一个要求,就是希望在 A 结束时停止 B。我按照这里提到的步骤操作并修改C.sh为:

parallel -j2 --halt now,success=1 ::: 'sh A.sh' 'sh B.sh'
Run Code Online (Sandbox Code Playgroud)

输出是:

A: 2s
A: 4s
A: 6s
parallel: This job succeeded:
sh A.sh
Run Code Online (Sandbox Code Playgroud)

看来 B 不是这样运行的。谁能告诉我并行运行两个脚本 A 和 B 并在 A 结束时停止 B的正确方法什么?

Kam*_*Cuk 5

并行运行两个脚本 A 和 B 并在 A 结束时停止 B?

所以就这样做吧。

sh B.sh &
b_pid=$!
{
    sh A.sh 
    kill "$b_pid"
} &
wait
Run Code Online (Sandbox Code Playgroud)