我有一个用例,我必须执行一些长时间运行的命令,所以我必须并行运行 3-6 个命令,以便我能尽快完成。
下面是我的代码片段:
#!/bin/sh
executeCommand(){
//command which will run for almost 2-3 min
}
executeCommand 1 &
P1=$!
executeCommand 2 &
P2=$!
executeCommand 3 &
P3=$!
wait $P1 $P2 $P3
我在运行此块时观察到,P3 首先运行,然后 30 秒后,P2 和 P3 同时运行。实际上,我只需要一次开始,以便尽快完成。
以下是我的机器配置: EC2 实例:p3.2xlarge(8vCPU、61GB RAM、1 Nvidia Tesla V100 GPU、16 GPU 内存 (GB))
有人可以建议最好一次运行所有命令吗?
提前致谢
答案1
你的代码是正确的。
当您说 P2 和 P3“等待”P1 完成后再开始时,我认为您是错误的。
这是一个证明(为了确保您可以通过在实际代码中添加相同的调试消息来实际测试相同的事情):
executeCommand(){
echo "Starting $1"
sleep 4
echo "$1 Complete"
}
executeCommand 1 &
p1=$!
executeCommand 2 &
p2=$!
executeCommand 3 &
p3=$!
wait "$p1" "$p2" "$p3"
$ sh yourScript
Starting 1
Starting 2
Starting 3
1 Complete
2 Complete
3 Complete
$