使用睡眠功能时如何增加计数?

时间:2012-04-26 07:25:26

标签: c signals sleep

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

2 个答案:

答案 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()语句,以确保它被调用。