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

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

sleep 2
echo "A: 2s"
sleep 2
echo "A: 4s"
sleep 2
echo "A: 6s"

我还有一个 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"

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

sh A.sh &
sh B.sh &
wait

输出是:

B: 2s
A: 2s
A: 4s
B: 4s
A: 6s
B: 6s
B: 8s
B: 10s

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

parallel -j2 --halt now,success=1 ::: 'sh A.sh' 'sh B.sh'

输出是:

A: 2s
A: 4s
A: 6s
parallel: This job succeeded:
sh A.sh

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

回答

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

所以就这样做吧。

sh B.sh &
b_pid=$!
{
    sh A.sh 
    kill "$b_pid"
} &
wait


以上是Shell:如何并行运行两个脚本A和B并在A结束时停止B的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>