我已经 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/