当前位置:  技术问答>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
这是为什么呢?谢谢大家!

|
晕 哪来的1

|
因为父进程比子进程先退出,于是子进程是孤儿进程,被init进程收留,而init进程就是1.

如果是第二种打印结果,那么是子进程先退出,父进程再退出,这样会导致子进程成为僵尸进程(也就是留下了一些没有回收的资源),所以请记住父进程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

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 我想和vfork出来的子进程通信(见者加分)
  • <unix环境变量高级编程第8章> vfork例题的疑问
  • 我想让vfork后就execl一进程,同时让execl出来的进程之间能相互通信,求助
  • 请问下面一个关于vfork的c程序的运行结果为什么会出现Segmentation fault ?哪位高手帮我解释下,谢谢。
  • 急!同一个c文件里vfork();pthread_create();两个函数,Makefile该怎么写?谢谢
  • vfork函数
  • 关于vfork()函数对父进程空间的处理
  • what's the difference between fork()&vfork()?
  • vfork深度解析!!!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3