#include<sys/types.h>
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
printf("origin is %d\n",getpid());
printf("origin p is %d\n",getppid());
pid_t pid;
pid=fork();
if(pid>0)
{
printf("parent is %d\n",getpid());
}
else if(pid==0)
{
printf("child is %d\n",getpid());
printf("child's parent is %d\n",getppid());
}
}
运行结果显示,调用getppid之后,child的父进程PID号和它的父进程不同(
父3973,子中的父1224),但是更改代码,只要加入一个可以让程序阻塞的代码,就正确,在上述代码最后加个while 1,代码和运行结果如下:
#include<sys/types.h>
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
printf("origin is %d\n",getpid());
printf("origin p is %d\n",getppid());
pid_t pid;
pid=fork();
if(pid>0)
{
printf("parent is %d\n",getpid());
}
else if(pid==0)
{
printf("child is %d\n",getpid());
printf("child's parent is %d\n",getppid());
}
while(1)
;
}
说明,可执行文件是app,在app进程中的origin p 进程PID号是bash的2071,但是为什么在不阻塞的情况下,在child进程中调用getppid函数得到的PID号与父进程不匹配,而在阻塞的情况下就正确,不管加while循环还是scanf得到的都正确。求解啊