我正在运行程序
#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()父母的代码来等待孩子执行。然后,它应该会按预期工作。
wait()