等待() 等待进程是否消耗系统 CPU

Does a wait() waiting process consume system CPU

本文关键字:等待 系统 CPU 是否 进程      更新时间:2023-10-16

问题 1

我想开发一个轻恶魔A来监督另一个恶魔B。 我的轻守护进程A将全程运行wait(),并在每次wait()返回时检查守护进程B是否仍在运行

下面是我的 light supervisor 守护程序的源代码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
}

我的守护程序A的上述代码会导致 CPU 负载吗?wait()函数会导致 CPU 负载吗?

问题2

有没有办法检测守护程序B是否被信号处理程序停止?

wait()函数

会导致 CPU 负载吗?

否,wait()函数在等待时不会消耗任何 CPU。

但要么你的例子过于简单化,要么掩盖了对wait()行为的误解。wait()函数用于等待子进程终止或停止,但程序不会生成任何子进程。 (请注意,"终止"和"停止"是不同的东西。 此外,如果您的程序生成了它正在监视的"守护程序 B"进程,那么它可以从返回的 pid 和状态中判断该守护进程是否仍在运行。

有没有办法检测守护程序 B 是否被信号处理程序停止?

当进程停止或终止时,SIGCHLD将传递到其父进程。 这会与wait()交互,但您也可以注册自己的处理程序。 但是,没有内置机制可以让进程注册在其自己的子进程以外的进程停止或终止时发出信号。