我为alarm()
创建了一个signal handler
。父母派出另一个没有待处理的警报信号的过程。所以,警报只在父进程中调用。 但是当alarm(2)
被调用时,它会覆盖父进程中的sleep(10)
。家长只在打印前等待2秒钟:C中的alarm(int)可以覆盖sleep(int)吗?
"parent retval=8"
而孩子等待10秒。为什么alarm()
信号覆盖sleep()
,并确实返回任何东西(显然它在这种情况下,但为什么?sleep()
不应该返回任何东西,对吧?)?
代码如下。
<headers>
pid_t cpid;
int main() {
int retval;
signal(SIGALRM, handler);
alarm(2);
if ((cpid = fork()) == 0) {
printf(“I’m the child\n”);
retval = sleep(10);
printf(“child retval=%d\n”, retval);
}
else {
printf(“I’m the parent\n”);
retval = sleep(10);
printf(“parent retval=%d\n”, retval);
}
}
/* Handle SIGALRM */
void handler(int sig)
{
if (cpid == 0)
printf(“running child handler\n”);
else
printf(“running parent handler\n”);
}
谢谢!我对于闹钟对睡眠有什么影响感到困惑,但它现在清晰了! – Krishh