我已经为一个进程分叉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 );
}
这是单个流程的代码,但你已经明白了。您只需要对多进程程序使用相同的方式。