Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C getpid和getppid返回两个不同的值_C_Fork_Pid - Fatal编程技术网

C getpid和getppid返回两个不同的值

C getpid和getppid返回两个不同的值,c,fork,pid,C,Fork,Pid,当我运行下面的代码时 #include <stdio.h> #include <sys/types.h> //int i=0; int main(){ int id ; id = fork() ; printf("id value : %d\n",id); if ( id == 0 ) { printf ( "Child : Hello I am the child process\n"); printf ( "Child : Child

当我运行下面的代码时

#include <stdio.h>
#include <sys/types.h>
//int i=0;
int main(){

int id ;
id = fork() ;
printf("id value : %d\n",id);
    if ( id == 0 )
    {
    printf ( "Child : Hello I am the child process\n");
    printf ( "Child : Child’s PID: %d\n", getpid());
    printf ( "Child : Parent’s PID: %d\n", getppid());
    }
    else
    {
    printf ( "Parent : Hello I am the parent process\n" ) ;
    printf ( "Parent : Parent’s PID: %d\n", getpid());
    printf ( "Parent : Child’s PID: %d\n", id);
    } 

}

家长的PID(20172)与孩子的家长ID(1)有何不同?这两个值不应该相等吗?

发生的情况是父级在子级运行之前终止。这使得子进程成为孤立进程,并被PID为1的根进程采用。如果您设置延迟或从stdin读取数据,而不是让父级终止,您将看到预期的结果

进程ID 1通常是初始化进程,主要负责启动和关闭系统。init(初始化的缩写)是一个守护进程,它是所有其他进程的直接或间接祖先


正如user314104指出的那样,wait()和waitpid()函数的设计目的是允许父进程挂起自身,直到子进程的状态发生变化。因此,在if语句的父分支中调用wait()将导致父分支等待子分支终止

由于父进程耗尽并释放,其子进程成为孤立进程,pid为1的init(初始化的缩写)接收到孤立进程。

或者,更常规地说,wait()和waitpid()。@Jackson使用link添加了更多信息。我觉得需要完成你的好答案。如果你不喜欢我,我会回来的。
id value : 20173
Parent : Hello I am the parent process
Parent : Parent’s PID: 20172
Parent : Child’s PID: 20173
id value : 0
Child : Hello I am the child process
Child : Child’s PID: 20173
Child : Parent’s PID: 1