2012-04-26 73 views
2

嘿,我似乎迷路了。我应该能够在一个无限循环内增加一个孩子的计数,并且每当家长发送一个信号时,每一秒钟都应该打印一次计数。我写了我的代码,但我认为使用fork后,子进程和父进程同时运行,但事实并非如此,所以我不知道如何解决这个问题。任何帮助将是伟大的如何在使用睡眠功能时增加计数?

+3

*我写了我的代码... *给我们看。 – cnicutar 2012-04-26 07:28:49

回答

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()语句到您的信号处理程序,以便您可以确保它被调用。

+0

非常感谢,我想向您展示我的代码,您能告诉我您是如何发送该代码,以便它可以保持这种形式吗?当我复制和粘贴我的代码后,我发送它后,一束 – ctng1213 2012-04-26 07:56:32

1

子进程应该能够运行sleep(),并让父母发送SIGALRM将其唤醒。也许你让孩子坐在busy loop,耗费了太多的CPU,父母没有按预期跑步。

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

+0

我试图粘贴我的代码,但它并没有保留在我粘贴的表单中。在我粘贴我的代码之前,有什么特别的我需要做?顺便说一下,我是提出问题的人。 – ctng1213 2012-04-26 07:48:40

+0

@ user1357998不确定,可能是问题长度和帐户的相对新颖性可能存在问题。您可以尝试使用pastebin或其他类似的网站进行临时存储,并希望有人编辑它,当然这不是太长。你的名字就在你的评论和你的问题上。 :) – unwind 2012-04-26 08:27:02