#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main (void) {
int pid, fpid, ppid;
fpid = fork();
printf ("fpid is is %d\n", fpid);
sleep(5);
if (fpid > 0) {
pid = getpid();
ppid = getppid();
printf ("\nThis is Parent. My pid %d. My parent's pid %d\n", pid, ppid);
} else if (fpid == 0) {
sleep(1);
pid = getpid();
ppid = getppid();
printf ("\nThis is Child. My pid %d. My parent'a pid %d\n", pid, ppid);
}
}
我认为当父进程ID是1时,意味着父进程已经被终止,所以子进程被重新初始化为1(init,第一个进程)。父母程序会被终止是否有任何理由?为什么子进程认为父进程ID是1?
下次请正确格式化您的代码。 – d3L
它没有任何理由坚持下去,假设你选择的代码的其余部分*不*发布在父进程代码路径中没有'wait'等待它的子进程完成并收集其状态。 – WhozCraig
OT:'fork()'返回一个'pid_t',而不是'int',顺便说一句。 'getpid()'和'getppid()'是相同的。 – alk