加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

子进程和父进程ID

发布时间:2020-12-16 05:05:53 所属栏目:百科 来源:网络整理
导读:刚刚与子进程块中的父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=%dn",getpid(),getppid());
刚刚与子进程块中的父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=%dn",getpid(),getppid()); 
    }
    else{
            printf("pid in parent=%d and childid=%dn",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=%dn",getppid()); 
    }
    else{
        printf("pid in parent=%d and childid=%dn",pid);
    }

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读