#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