在c中打印每个子进程生成的值

时间:2014-10-08 13:26:16

标签: c fork

我已经多次分叉一个过程来生育n个孩子。在分叉之后,在某些时候,我需要在每个子进程中生成一个随机数,所以我写了一个语句来这样做。但在我继续之前,我希望看到每个孩子在终端上生成的随机数。当我写printf()时,我只得到一个输出,我相信是父进程生成的随机数。有人可以帮助我如何让所有子进程打印变量rnd_number在其地址空间中保存的值吗?

此外,由于每个孩子都会执行调用它们来打印rnd_number值的语句,我想知道是什么原因导致它们无法在终端上打印。如果我正在混淆一些概念,我请求有人帮助我。

1 个答案:

答案 0 :(得分:0)

你必须在父亲等待每个孩子完成。如果它在孩子面前完成,孩子们就不会打印任何东西。

关于printf,不要忘记这个函数缓冲数据,要小心使用'\ n'来强制printf的flush。 要知道哪个孩子随机获得了什么,你想使用getpid()函数打印它的pid。

pid = fork();
switch (pid)
{
  case '0' : // Son
            srand(time(NULL)); // having one srand per process sounds better than doing it in the father
            int r = rand() % X; // put your randomizer here
            printf("Getting %d from %d \n", r, getpid());
            return r; //sending to father rand value
  case -1 : //Error
           perror("fork");
           exit(1);
  default : //father
          int status;
          wait(&status);
          printf("retriving %d from %d",WEXITSTATUS(status), pid ); 
}

这是单个进程的代码,但你明白了。您只需要为多进程程序使用相同的方式。