Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何检测另一个守护进程是否终止_C_Linux_Process - Fatal编程技术网

C 如何检测另一个守护进程是否终止

C 如何检测另一个守护进程是否终止,c,linux,process,C,Linux,Process,我想开发一个守护进程来监督另一个守护进程。如果另一个守护进程由于任何原因崩溃或停止,那么我的守护进程将重新启动它 如何在C中检测另一个进程(不是子进程)是否已停止?检测另一个进程是否已终止的唯一方法是它是否是主管的子进程。在这种情况下,您可以在进程退出时调用wait或waitpid或安排处理SIGCHLD信号 这就是像upstart或systemd或runit甚至是legacyinit这样的处理器管理器的基本工作原理 这类工作还有其他方法,但它们最终是脆弱的,容易出现问题。例如,如果您知道正在运

我想开发一个守护进程来监督另一个守护进程。如果另一个守护进程由于任何原因崩溃或停止,那么我的守护进程将重新启动它

如何在C中检测另一个进程(不是子进程)是否已停止?

检测另一个进程是否已终止的唯一方法是它是否是主管的子进程。在这种情况下,您可以在进程退出时调用
wait
waitpid
或安排处理
SIGCHLD
信号

这就是像
upstart
systemd
runit
甚至是legacy
init
这样的处理器管理器的基本工作原理

这类工作还有其他方法,但它们最终是脆弱的,容易出现问题。例如,如果您知道正在运行的进程的PID,您可以周期性地用
kill(PID,0)
(一个错误指示给定的PID不再运行)…向它发送信号。但是此解决方案有两个问题:PID可以回收,因此,如果相同的PID仍然处于活动状态,则不能保证它实际上就是您感兴趣的过程。此外,这需要定期轮询正在运行的进程,而调用
wait
waitpid
可能是一种阻塞操作,这会产生更简单的代码


类似地,您可以在
/proc
中检查正在运行的进程列表,但这与以前的解决方案存在几乎相同的问题。

要澄清,当您说“已停止”时,您是指进程已终止,还是指守护进程已停止?我希望是前者,但这会有所不同。