首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >子进程和父进程id

问子进程和父进程id
EN

Stack Overflow用户
提问于 2013-08-09 19:32:02
回答 5查看 40K关注 0票数 6

只是混淆了子进程块中的父进程pid值。我的课程如下:

代码语言:javascript
复制
 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",getpid(),pid);
    }
    exit(EXIT_SUCCESS);
  }

输出: parent=2642和childid=2643中的pid

child=2643和parent=1中的pid

在“高级Unix编程”中,它说子进程可以使用getppid()函数获得父进程id。但在这里,我得到了"1“,即"init”进程id。

如何获得子进程块中的父pid值。请帮助我获得产量。

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-08-09 19:35:58

那是因为父亲可以在儿子之前离开。如果父亲存在而没有请求它的子进程的返回值,那么该子进程将被pid=1所拥有。在传统的UNIX或GNU系统SystemV init中。

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

代码语言:javascript
复制
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",getpid(),pid);
    }

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

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

Stack Overflow用户

发布于 2013-08-09 19:35:46

在分叉之后,您有两个新的进程,您可以知道父进程中的子id,而不是相反的。如果您真的需要这样做,您必须在叉子之前打开一个管道(popen),然后家长可以将它写入管道中,而子管道可以读取它。

票数 0
EN

Stack Overflow用户

发布于 2017-03-26 17:52:59

一旦父程序完成了它的执行,并且子程序仍然在运行。然后,孩子被称为孤儿(因为它的父母去世了),如果您是通过root登录(它的pid =1 ),则init进程会采用它。

如果您希望在父级之前先退出子程序,那么使用wait()系统调用及其变体。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18154296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档