在我工作的地方,我在shell脚本中看到了以下片段,以检查后台作业的完成情况:
until [[ `ps -ef | grep backgroundjob | grep -v grep | wc -l` -eq 0 ]];
do
sleep 30
done
在阅读了wait命令的手册页后,我知道这3行可以用更简短易读的方式替换为wait命令。我的问题是:
是否存在wait命令可能存在的任何缺点或情况 不能像上面的片段一样工作?
如何执行wait命令?它似乎几乎回归 马上,所以可能是一个 紧环?如果它是一个紧凑的循环,那么可能是上面的代码片段 在等待命令的情况下,CPU休眠30秒会很容易吗?
答案 0 :(得分:2)
wait
仅适用于当前shell的子进程。这意味着,如果您的进程分支到后台本身,原始子进程将退出,并且shell无法wait
就可以了。
有些贝壳'如果没有这样的子进程,wait
内置将立即返回;其他人,如bash
,会警告你:
$ wait 1234
bash: wait: pid 1234 is not a child of this shell
wait
不会施加任何CPU负载,因为它使用waitpid(2)
系统调用,暂停进程直到指定进程退出。