等待最后创建的进程(分叉的守护进程)结束

时间:2016-08-24 06:14:22

标签: bash

我正在编写一个在inittab中使用的包装器脚本。 此脚本启动守护程序并等待它终止。

这是我目前所拥有的:

#!/bin/bash

/usr/local/bin/mydaemon --lots_of_params_here
while kill -0 `echo $!` 2> /dev/null; do sleep 1; done;

问题出在第二行;它只是立即返回。如果我改为:

while kill -0 `pgrep mydaemon` 2> /dev/null; do sleep 1; done;

一切正常,但这对我来说不是一个好的解决方案,因为我有其他前缀为mydaemon的脚本。

我做错了什么?

编辑:

问题似乎与守护进程fork()有关。所以,我总是在$!中获得父pid。我正在寻找解决这个问题的方法。也许我应该使用pid文件并让mydaemon在那里写下它的pid。

1 个答案:

答案 0 :(得分:2)

您可以通过以下方式解决问题。

#!/bin/bash
/usr/local/bin/mydaemon --lots_of_params_here &
wait $!

wait命令将等待该过程完成并结束。

如果您正在寻找等待其他一些命令,那么您可以将PID存储在任何其他变量中并使用它。

#!/bin/bash
/usr/local/bin/mydaemon --lots_of_params_here &
mypid=$!
### Some other commands
wait $mypid