问题1
我想开发一个轻型守护者 A
,监督另一个damemon B
。
我的轻守护程序 A
将在整个时间内运行wait()
并检查守护程序 B
是否仍在每次运行{ {1}}返回
在我的轻管主管守护程序 wait()
的源代码之后:
A
我的守护程序 void main(void)
{
int pid, status;
while(1)
{
pid = wait(&status);
if (!daemon_is_still_running("daemonB")) {
//Do something
}
}
}
int daemon_is_still_running(char *name)
{
//this function check all the pid under the folder /proc and
//return 0 in case the daemon is not running
//return 1 in case the daemon is still running
}
的上述代码是否会导致CPU负载? A
函数会导致CPU负载吗?
问题2
有没有办法检测守护程序 wait()
是否已停止使用信号处理程序?
答案 0 :(得分:2)
wait()
函数会导致CPU负载吗?
不,wait()
函数在等待时不消耗任何CPU。
但要么你的例子过于简单,要么就是对wait()
行为的误解。 wait()
函数用于等待子进程 终止或停止,但您的程序不会产生任何子进程。 (注意"终止"和"停止"是不同的事情。)此外,如果你的程序产生了"守护进程B"进程是监视,然后它可以从返回的pid和状态判断该守护进程是否仍在运行。
有没有办法检测守护程序B是否被信号处理程序停止了?
当进程停止或终止时,SIGCHLD
将被传递到其父进程。这与wait()
交互,但您也可以注册自己的处理程序。但是,没有内置机制,当一个进程在其自身子进程之外的进程停止或终止时进行注册以进行信号发送。