$!从父脚本而不是最后一个命令回显PID

时间:2013-09-18 13:12:33

标签: linux bash

我有一个服务脚本,我很可能使用一些非传统的方法来实现我想要的但仍然可以工作但不是。

在以下命令中,我正在启动一个进程,将该进程的PID保存到var $PID,然后将该变量写入PID文件。出于某种原因,当我将PID保存到$PID时,写入var的PID是父脚本的PID,而不是最后一个命令。

如何在不做一些令人讨厌的ps -ef | grep内容的情况下获取守护程序命令的PID?

daemon --user $RHUSER "php -f $proc $ipaddr $port" >/dev/null 2>&1 &
PID=$!
[[ `ps h -p $PID` ]] && (success; echo $PID > /var/run/${proc%.*}.pid) || failure
echo

1 个答案:

答案 0 :(得分:0)

您可以将pid保存到-F的文件中,然后从那里读取:

daemon --user "$RHUSER" -F /tmp/pid.daemon "php -f $proc $ipaddr $port" >/dev/null 2>&1  ## Remove `&`
PID=$(</tmp/pid.daemon)

我们在命令末尾删除&以确保daemon在读取PID文件之前写入其子进程的进程ID。

您还可以将--name-P结合使用。请参阅manual