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

  • 本文关键字:子进程 打印 c fork
  • 更新时间 :
  • 英文 :


我已经为一个进程分叉n次,以生成n个子进程。分叉后,在某个时候,我需要在每个子进程中生成一个随机数,所以我写了一个声明来这样做。但在继续之前,我想看看每个子进程在终端上生成的随机数。当我写printf()时,我只得到一个输出,我认为它是父级生成的随机数。有人能帮助我如何让所有子进程打印变量rnd_number在其地址空间中保存的值吗?

此外,由于每个孩子都会执行调用他们打印rnd_number值的语句,我想知道是什么让他们没有在终端上打印出来。如果我把一些概念搞混了,我请求有人在这里帮我。

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

关于printf,不要忘记这个函数会缓冲数据,要小心使用'\n'来强制printf的刷新。为了知道哪个孩子得到了什么随机,您需要使用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 ); 
}

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

最新更新