作为迁移脚本的一部分,我必须对数十万个文件执行 chmod 和 chown 操作。每个命令大约需要一个半小时才能完成。我意识到这两个操作可以同时运行,从而缩短了运行时间,我通过在 shell 中进行测试证实了这一点。
我知道使用“&”将命令推送到后台的技巧,但我需要确保两个过程都完成,然后才能继续执行脚本的其余部分。
谢谢
答案1
使用wait
命令。
此演示:
#!/bin/bash
echo $SECONDS
sleep 12&
sleep 15&
jobs
wait
echo $SECONDS
echo "jobs are done"
产生以下输出:
0
[1]- Running sleep 12 &
[2]+ Running sleep 15 &
15
jobs are done
在输出最后两行之前有十五秒的停顿。
答案2
您可以捕获 pid 并使用等待。
chmod options
CHMODPID=$!
chown options
CHOWNPID=$!
wait $CHMODPID
wait $CHOWNPID
(应该适用于 bash;其他 shell 类型的详细信息可能有所不同)
答案3
如果您需要确保两个进程都已完成,然后再继续下一步,一个简单的解决方案就是将一些内容写入文件并检查它。只需对文件执行 head 或 cat(默认值为 0)并在第一行添加 1。如果检测到 2,则两个进程都已完成。当然,添加应该在脚本的最底部完成。