如何解决使用 fork() 创建 N 进程的算法正在打印重复值
我有一个使用 fork() 创建 N 进程的算法。流程正在成功生成,因为我是手工绘制的。
问题是当我尝试打印它们(不需要作为树)时,我发现输出中有重复的进程。找不到原因。
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <string.h>
#include <sys/mman.h>
void GenerateTree(int n){
printf("PID: %d | PPID: %d\n",getpid(),getppid());
int *ptr = mmap(NULL,n*sizeof(int),PROT_READ | PROT_WRITE,MAP_SHARED | MAP_ANONYMOUS,0);
int *ptr1 = mmap(NULL,sizeof(int),0);
ptr1[0]=0;
int z = 0;
while(z<n){
if(ptr1[0]<n-1){
pid_t pid;
pid = fork();
if(pid==0){
printf("PID: %d | PPID: %d\n",getppid());
ptr[ptr1[0]] = getpid();
z++;
ptr1[0]=ptr1[0]+1;
if(ptr1[0]<n-1){
fork();
printf("PID: %d | PPID: %d\n",getppid());
ptr[ptr1[0]] = getpid();
ptr1[0]=ptr1[0]+1;
z++;
}
else{
break;
}
}
else{
wait(NULL);
break;
}
}
else{
break;
}
}
}
int main(int argc,char const *argv[])
{
GenerateTree(11);
return 0;
}
输出看起来像这样。
PID: 5480 | PPID: 1168
PID: 5481 | PPID: 5480
PID: 5481 | PPID: 5480
PID: 5482 | PPID: 5481
PID: 5483 | PPID: 5481
PID: 5484 | PPID: 5482
PID: 5483 | PPID: 5481
PID: 5484 | PPID: 5482
PID: 5486 | PPID: 5484
PID: 5485 | PPID: 5483
PID: 5487 | PPID: 5483
PID: 5488 | PPID: 5484
PID: 5489 | PPID: 5485
PID: 5490 | PPID: 5486
感谢您的帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。