我已经启动了一个服务守护进程,通过存储 rc5.d 的脚本文件运行二进制文件(用 C++ 编写)。
但我不确定如何捕获守护进程的 pid 并将其存储在 /var/run/.pid 的 pid 文件中。这样我就可以使用 pid 进行终止。我怎样才能做到这一点?
尝试使用init 脚本中start-stop-daemon(8)
的--pidfile
参数。让您的程序将其 PID 写入指定位置(通常在配置文件中确定)。
您需要注意的是过时的 PID 文件,例如,如果锁定文件在重新启动后仍然存在。该逻辑最好在 init 脚本本身中实现,因此--exec
可以选择start-stop-daemon
.
例如,如果/var/run/foo.pid
is 1234
,并且/proc/1234/exe
不是您的服务,则锁定文件已过时,应悄悄删除,以允许服务正常启动。
就您的应用程序而言,只需确保锁定文件的位置是可配置的,并且存在一些方法来告诉 init 脚本将其放置在哪里。
例如:(示例:/etc/default/foo):
PIDFILE=/var/run/foo.pid
OTHEROPTION=foo
然后在 /etc/init.d/foo :
[ -f /etc/default/foo ] && . /etc/default/foo
同样,除了一致地写入文件之外,所有这些逻辑都应该在您的应用程序之外处理。
如果您知道程序打开的端口,请使用fuser
命令确定 pid。