我有以下代码
void main()
{
pid_t pid,pid1;
pid = fork();
if(pid==0)
{
pid1= getpid();
printf("\n Child A %d" ,pid);
printf("\n Child B %d",pid1);
}
else
{
pid1 = getpid();
printf("\n Parent C %d:",pid);
printf("\nParent d %d:",pid1);
}
}
我不明白为什么我为B和C获得相同的进程ID。任何人都可以帮助我吗?
答案 0 :(得分:0)
pid1 = getpid();
这是在子进程中运行的,因此给出了进程id。
pid = fork();
这是从父进程启动的,但父级和子级都可以使用返回值。但是,它会向父进程和子进程返回不同的值。直接从fork man page:
子进程的PID在父进程中返回,0是 孩子回来了
因此在两种情况下(B和C),它都是子进程的pid。
答案 1 :(得分:0)
此代码由两个进程运行,一个是父进程,另一个是子进程。 p process - 返回c进程的id和c进程返回0.我认为你的程序可能是fork()的一个demo,所以它可能是这样的:
void main()
{
pid_t pid,pid1;
pid = fork();
if(pid==0)
{
pid1= getpid();
printf("\n i am Child A %d" ,pid1);
printf("\n Parent A %d",getppid());
}
else
{
pid1 = getpid();
printf("\n i am Parent B %d:",pid1);
printf("\n Children B %d:",pid);
}
}