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