如何捕获从init.d运行的linux守护进程的pid

我已经启动了一个服务守护进程,通过运行二进制文件(用C ++编写)通过脚本文件保存rc5.d。

但我不确定如何捕获守护进程的pid,并将其存储在/var/run/.pid中的pid文件中。 这样我可以使用pid来终止。 我怎样才能做到这一点?

尝试在初始化脚本中使用start-stop-daemon(8)--pidfile参数。 让程序将自己的PID写入指定的位置(通常在配置文件中确定)。

例如,如果锁定文件在重新启动时持续存在,您必须注意的是过时的PID文件。 该逻辑最好在init脚本中实现,因此可以使用--exec选项来start-stop-daemon

例如,如果/var/run/foo.pid1234 ,而/proc/1234/exe不是你的服务,那么锁文件是陈旧的,应该安静的删除,这样服务才能正常启动。

就你的应用程序而言,只要确保lockfile的位置是可配置的,并且存在一些方法来告诉init脚本把它放在哪里。

比如:(sample:/ etc / default / foo):

 PIDFILE=/var/run/foo.pid OTHEROPTION=foo 

然后在/etc/init.d/foo中:

 [ -f /etc/default/foo ] && . /etc/default/foo 

同样,除了一致地写入文件之外,所有这些逻辑都应该在应用程序之外处理。

如果您知道程序已打开的端口,请使用fuser命令确定pid。

你可以采用不止一种方式:

  1. 在你的程序中使用getpid把它写入一个可配置的文件(也许看ENV)
  2. 使用$! 启动程序后(这在archlinux上不适用于我: – ?)
  3. 启动程序后,使用pidof