如何使守护进程 - 阻塞直到底层进程将死亡?

时间:2012-10-27 12:20:39

标签: bash signals daemon

我使用daemon命令(RHEL 6.2)守护进程。我正在使用以下行开始流程,下面的行停止它:

daemon --command "/opt/my-service" --respawn --name=my-service --verbose
daemon --stop --name=my-service --verbose  

一切正常,直到我尝试使用停止/启动方法重启我的流程:

daemon --stop --name=my-service --verbose
daemon --command "/opt/my-service" --respawn --name=my-service --verbose

在执行上述命令之前,进程正在运行,然后将停止现有进程,但不会创建新进程。相反,以下行将记录到/var/log/messages

  

Oct 27 07:59:46 myhostname my-service: my-service: fatal: failed to become a daemon: Resource temporarily unavailable

据我所知,这意味着我们试图获取对pid文件的锁定,但另一个进程正在对其进行锁定。或者换句话说:原始流程仍在运行。

有趣的是它无法通过以下命令再现:

daemon --command "sleep 30s" --respawn --name=sleeper --verbose
daemon --stop --name=sleeper --verbose
daemon --command "sleep 30s" --respawn --name=sleeper --verbose

然后我的进程中必定存在导致/利用--stop的异步性质的东西。

如何阻止--stop

1 个答案:

答案 0 :(得分:0)

这可能会有所帮助:

while true; do
  daemon --name=my-service --running --verbose | grep not
  [ $? -eq 0 ] && exit
  sleep 1
done

描述为p代码: 永远{   检查daemon --name=my-service --running --verbose是否返回包含单词not的内容   如果是,exit   否则sleep a second }