当前位置: 技术问答>linux和unix
一个简单的vfork pid 问题?
来源: 互联网 发布时间:2017-03-02
本文导语: 源码: #include #include #include #include #include #include #include int main() { pid_t child; if((child=fork())==-1) { printf("fork error: %d n",strerror(errno)); exit(1); } else if(child==0)//子进程 { printf("I am the child: %dn ",getpid()); p...
源码:
#include
#include
#include
#include
#include
#include
#include
int main()
{
pid_t child;
if((child=fork())==-1)
{
printf("fork error: %d n",strerror(errno));
exit(1);
}
else if(child==0)//子进程
{
printf("I am the child: %dn ",getpid());
printf("father pid id :%dn",getppid());
exit(0);
}
else
{
printf("I am the father:%d n ",getpid());
return 0;
}
}
运行结果:为什么有时是这样的
I am the father:3330
I am the child: 3331
father pid id :1
父进程号不一致,但大不多情况下运行结果想这样:
I am the father:3366
I am the child: 3367
father pid id :3366
这是为什么呢?谢谢大家!
#include
#include
#include
#include
#include
#include
#include
int main()
{
pid_t child;
if((child=fork())==-1)
{
printf("fork error: %d n",strerror(errno));
exit(1);
}
else if(child==0)//子进程
{
printf("I am the child: %dn ",getpid());
printf("father pid id :%dn",getppid());
exit(0);
}
else
{
printf("I am the father:%d n ",getpid());
return 0;
}
}
运行结果:为什么有时是这样的
I am the father:3330
I am the child: 3331
father pid id :1
父进程号不一致,但大不多情况下运行结果想这样:
I am the father:3366
I am the child: 3367
father pid id :3366
这是为什么呢?谢谢大家!
|
晕 哪来的1
|
因为父进程比子进程先退出,于是子进程是孤儿进程,被init进程收留,而init进程就是1.
如果是第二种打印结果,那么是子进程先退出,父进程再退出,这样会导致子进程成为僵尸进程(也就是留下了一些没有回收的资源),所以请记住父进程wait.
如果是第二种打印结果,那么是子进程先退出,父进程再退出,这样会导致子进程成为僵尸进程(也就是留下了一些没有回收的资源),所以请记住父进程wait.
|
int pid = fork();
if (0 == pid)
{
printf("I am the child: %dn ",getpid());
printf("father pid id :%dn",getppid());
}
else
{
printf("I am the father:%d n ",getpid());
}
I am the child: 17031
father pid id :17030
I am the father:17030
确实是这样的,搞不懂楼主哪里来的1
if (0 == pid)
{
printf("I am the child: %dn ",getpid());
printf("father pid id :%dn",getppid());
}
else
{
printf("I am the father:%d n ",getpid());
}
I am the child: 17031
father pid id :17030
I am the father:17030
确实是这样的,搞不懂楼主哪里来的1