当前位置: 首页 > 面试题库 >

为什么子级的getppid()返回1

韩晋
2023-03-14
问题内容

我正在运行程序

#include<stdio.h>
#include <unistd.h>
main()
{
    pid_t pid, ppid;
    printf("Hello World1\n");
    pid=fork();
    if(pid==0)
    {
        printf("I am the child\n");
        printf("The PID of child is %d\n",getpid());
        printf("The PID of parent of child is %d\n",getppid());
    }
    else
    {
        printf("I am the parent\n");
        printf("The PID of parent is %d\n",getpid());
        printf("The PID of parent of parent is %d\n",getppid());        
    }
}

我得到的输出是。

$ ./a.out 
Hello World1
I am the parent
The PID of parent is 3071
The PID of parent of parent is 2456
I am the child
The PID of child is 3072
The PID of parent of child is 1

我不明白这条线

子女的父母的PID为1

应该是3071?


问题答案:

因为在孩子要求其父母的pid之前,父进程已完成。

进程完成后,其所有子级都将重新分配为init进程的子级,其pid为1。

尝试使用wait()父母的代码来等待孩子执行。然后,它应该会按预期工作。



 类似资料:
  • 问题内容: 我有一个LinearLayout,此LinearLayout将容纳动态放置的视图。我需要找出LinearLayout子级的宽度,但是必须在onCreate方法中完成。通过研究,我发现您不能通过此方法使用getWidth。因此,我改为使用onWindowFocusChanged,它适用于父级LinearLayout(向我返回实际大小),但不适用于其子级。 我注意到的另一件事是,当屏幕逐渐

  • 问题内容: 我在一个子类中,当我尝试查找超类的名称时,我尝试了super.getClass(),但它仅返回了子类的名称。为什么? 问题答案: 应该做。

  • 问题内容: 为什么此javascript返回108而不是2008?它得到正确的日期和月份,但不正确的年份? year= 108? 问题答案: 这是一个Y2K问题,仅计算自1900年以来的年份。 有迹象表明,目前潜在的兼容性问题已经被弃用,取而代之的-从怪异模式: 为了使事情变得更加复杂,如今不建议使用date.getYear(),而应使用date.getFullYear(),而旧版本的浏览器则不支

  • 问题内容: 而且我不知道为什么! 我基本上有一个STRING(是,不是数组),它具有以下内容: 我想将其转换为String []。因此,首先我从第一个字符和最后一个字符除去substring(),以摆脱方括号[]。然后,我使用split()函数以逗号分隔。我尝试同时使用“ \ |” 和“,”和“ \,”具有相同的结果。 这就是我得到的: 这是它的代码。我把它变成了单线: 如您所见,第一部分是(ma

  • 问题内容: 这是简单的代码,我没有得到设置位图的结果,而是得到了null。谁能告诉我我在哪里犯错了? 更新 好的,所以我无法像我想的那样将文本转换为图像。这样呢 这会创建位图吗? 问题答案: 从文档中: 返回 解码的位图;如果无法解码图像,则 返回 null。 字符串“ test”中涉及的字节不是有效的位图,对吗? 如果将文本“ test”保存在名为or 等的文件中,并试图在Windows中打开它

  • 问题内容: 为什么要用Python返回? 我如何获得改组后的值而不是? 问题答案: 更改列表 到位 。 在原位更改结构的Python API方法通常返回,而不是修改后的数据结构。 如果要基于现有列表创建 新的 随机混排列表,并按顺序保留现有列表,则可以使用输入的完整长度: 您还可以将with用于排序键: 但这会调用排序(O(NlogN)操作),而采样到输入长度仅需要O(N)操作(与所使用的过程相同