答案 0 :(得分:1)
子进程应该只能运行sleep()
,并让父进程发送SIGALRM
来唤醒它。也许你让孩子坐在busy loop,消耗了太多的CPU,以至于父母没有像预期的那样运行。
当然,如果你展示你的代码,对这些问题的回答会更好。
答案 1 :(得分:1)
你所描述的应该是理论上的。
如果您不熟悉该过程,编写并行代码可能会非常棘手,特别是使用fork()
。
这是我的建议:在整个代码中添加一堆调试打印,例如:
int pid = fork();
if(pid == -1) {
printf("Fork failed!\n");
} else if (pid) {
printf("I'm the parent!\n");
// Do stuff
printf("Parent exiting\n");
exit(0);
} else {
printf("I'm the child!\n");
// Do stuff
printf("Child exiting\n");
exit(0);
}
然后你可以看看你的程序是否表现得如此。
还要在信号处理程序中添加printf()
语句,以确保它被调用。