我正在编写一个在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。
答案 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