我正在尝试waitpid()
为子进程制作我的进程,但也要每隔一段时间打印一些东西。
我目前的计划是安排一个itimer
,,waitpid()
处理SIGALRM
打印,并在完成时停止计时器waitpid()
。
我无法弄清楚的唯一部分是SIGALRM
防止waitpid()
.
我查看了手册页并没有看到任何标志。
想法?
如果waitpid()
返回-1
并且errno
等于EINTR
就重新开始调用waitpid()
。
pid_t pid;
while (((pid_t) -1) == (pid = waitpid(...)))
{
if (EINTR == errno)
{
continue;
}
...
}
或者(至少对于 Linux)可以通过安装信号处理程序时设置waitpid()
的标志来避免接收到信号时返回。SA_RESTART
有关这方面的更多信息,请参见此处: http: //man7.org/linux/man-pages/man7/signal.7.html
要么你必须在调用 waitpid() 之前屏蔽信号,但是你的警报将被延迟直到解除阻塞,或者你必须检查 waitpid() 返回值和 EINTR 的 errno