2

嘿伙计们,我似乎迷路了。我应该能够在无限循环内增加子项的计数,并在每次父项发送信号时打印计数,这应该是每 1 秒。我写了我的代码,但我认为使用 fork 后,子进程和父进程同时运行,但事实并非如此,所以我不确定如何解决这个问题。任何帮助都会很棒

4

2 回答 2

1

子进程应该能够运行sleep(),并让父进程SIGALRM唤醒它。也许你让孩子坐在一个忙碌的循环中,消耗了太多的 CPU 以至于父母没有像预期的那样运行。

当然,如果你展示你的代码,这些问题的答案会更好。

于 2012-04-26T07:36:28.963 回答
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()语句,以便确保它被调用。

于 2012-04-26T07:44:05.913 回答