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

标签 c fork

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

另外,由于每个 child 都会执行调用他们打印他们的 rnd_number 值的语句,我想知道是什么让他们不在终端上打印。如果我混淆了一些概念,我请求有人帮助我。

最佳答案

您必须在父亲中等待每个 child 完成。如果它在它的 child 之前完成, child 就不会打印任何东西。

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

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

关于c - 打印c中每个子进程产生的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26258079/

相关文章:

c++ - 在 opencv 中重用设备

c - 无法从 C 中的其他模块访问 linux 中共享库的自定义全局函数

c - 捕获SIGINT信号后退出程序

c - 简单的 30 个字符缓冲区 PIPE 打印不可打印的字符,不知道为什么

gradle - 斯波克+格拉德。并行测试执行

c - pthreads:如何断言代码在单线程上下文中运行

c - 为什么我运行c程序后总是得到0?请帮助我

计算二维数组中每列的负数

c - 使用 Visual Studio 调试 Fork [C]

c - 如何在 C 中与 Linux 一起使用共享内存