当我运行下面的代码时
#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);
}
}
Run Code Online (Sandbox Code Playgroud)
我的输出是
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
Run Code Online (Sandbox Code Playgroud)
父母的PID(20172)如何与孩子的父母的身份证(1)不同?这两者不应该相等吗?
Jac*_*son 24
发生的事情是父母在孩子跑步前终止.这使得孩子成为一个孤儿,它被PID进程的根进程所采用.如果你从stdin中提取延迟或读取数据而不是让父母终止你将看到你期望的结果.
进程ID 1通常是主要负责启动和关闭系统的init进程.init(初始化的简称)是一个守护进程,它是所有其他进程的直接或间接祖先.用于init的wiki链接
正如user314104指出的那样,wait()和waitpid()函数被设计为允许父进程暂停,直到子进程的状态发生变化.因此,在if语句的父分支中调用wait()会导致父进程等待子进程终止.