我已经启动了一个服务守护进程,通过运行二进制文件(用C ++编写)通过脚本文件保存rc5.d。
但我不确定如何捕获守护进程的pid,并将其存储在/var/run/.pid中的pid文件中。 这样我可以使用pid来终止。 我怎样才能做到这一点?
尝试在初始化脚本中使用start-stop-daemon(8)
和--pidfile
参数。 让程序将自己的PID写入指定的位置(通常在配置文件中确定)。
例如,如果锁定文件在重新启动时持续存在,您必须注意的是过时的PID文件。 该逻辑最好在init脚本中实现,因此可以使用--exec
选项来start-stop-daemon
。
例如,如果/var/run/foo.pid
是1234
,而/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。
你可以采用不止一种方式: