子进程和父进程ID

前端之家收集整理的这篇文章主要介绍了子进程和父进程ID前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
刚刚与子进程块中的父pid值混淆.我的计划如下:
int main(int argc,char *argv[])
  {
    pid_t pid;
    pid=fork();
    if(pid==-1){
            perror("fork failure");
            exit(EXIT_FAILURE);
    }
    else if(pid==0){
            printf("pid in child=%d and parent=%d\n",getpid(),getppid()); 
    }
    else{
            printf("pid in parent=%d and childid=%d\n",pid);
    }
    exit(EXIT_SUCCESS);
  }

输出
父母的pid = 2642,小孩= 2643

pid in child = 2643,parent = 1

在“高级Unix编程”中,它表示子进程可以使用getppid()函数获取父进程id.但在这里我得到“1”,这是“init”进程ID.

如何在子进程块中获取父pid值..请帮助我获取输出.

我在“Linux Mint OS”中执行但在“WindRiver”操作系统中我没有遇到这个问题.该程序是否根据操作系统改变行为?

解决方法

那是因为父亲可以/将在儿子面前退出.如果父亲在没有请求其子项的返回值的情况下存在,则该子进程将由pid = 1拥有.什么是经典的UNIX或GNU系统SystemV init.

解决方案是在父亲中使用waitpid():

int main(int argc,char *argv[])
{
    pid_t pid;
    pid=fork();
    if(pid==-1){
        perror("fork failure");
        exit(EXIT_FAILURE);
    }
    else if(pid==0){
        printf("pid in child=%d and parent=%d\n",getppid()); 
    }
    else{
        printf("pid in parent=%d and childid=%d\n",pid);
    }

    int status = -1;
    waitpid(pid,&status,WEXITED);

    printf("The child exited with return code %d\n",status);
    exit(EXIT_SUCCESS);
}

猜你在找的C&C++相关文章