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的正确方法是什么?
并行运行两个脚本 A 和 B 并在 A 结束时停止 B?
所以就这样做吧。
sh B.sh &
b_pid=$!
{
sh A.sh
kill "$b_pid"
} &
wait
Run Code Online (Sandbox Code Playgroud)