【发布时间】:2018-07-02 02:26:50
【问题描述】:
我试图了解一些unistd.h 函数的工作原理。
这是我写的代码:
#include <stdlib.h>
#include <unistd.h>
int main(){
pid_t pid;
pid=fork();
switch(pid) {
case 0: //child
printf("case 0:\nchild %d\nparent %d\n", getpid(), getppid());
break;
default: //parent
printf("default:\npid(child) %d\nparent %d\n", pid, getpid());
break;
}
}
我觉得case 0中getppid()得到的父pid和default情况下getpid()得到的父pid应该是一样的,但是这是我的小程序的输出:
default:
pid(child) 29208
parent 29207
Process returned 0 (0x0) execution time : 0.001s
Press ENTER to continue.
case 0:
child 29208
parent 1017
为什么它们不同? (一个是 29207,另一个是 1017)
【问题讨论】:
-
我猜这可能是由于终端中的 shell 同步不正确。您可以让孩子和父母将他们的输出写入单独的文件并进行比较吗?
-
您可能应该在父项中
wait()让子项完成。