【发布时间】:2012-05-06 22:08:03
【问题描述】:
大家好,我好像迷路了。我应该能够在无限循环内增加一个孩子的计数,并在每次父母发送信号时打印计数,这应该是每 1 秒。我写了我的代码,但我认为使用 fork 后,子进程和父进程同时运行,但事实并非如此,所以我不确定如何解决这个问题。任何帮助都会很棒
【问题讨论】:
-
我写了我的代码...给我们看看。
大家好,我好像迷路了。我应该能够在无限循环内增加一个孩子的计数,并在每次父母发送信号时打印计数,这应该是每 1 秒。我写了我的代码,但我认为使用 fork 后,子进程和父进程同时运行,但事实并非如此,所以我不确定如何解决这个问题。任何帮助都会很棒
【问题讨论】:
你所描述的应该在理论上可行。
编写并行代码可能很棘手,尤其是使用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() 语句,以便确保它被调用。
【讨论】:
子进程应该能够运行@987654321@,并让父进程发送SIGALRM 来唤醒它。也许你让孩子坐在busy loop 中,消耗了太多的 CPU 以至于父母没有按预期运行。
当然,如果你展示你的代码,这些问题的答案会更好。
【讨论】: