【发布时间】:2015-12-23 04:21:18
【问题描述】:
我在书籍和一些在线论坛中读到了这个子进程 pid 分配给它的父进程的内容。但我有这个代码:
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
int main()
{
pid_t pid;
pid=fork();
if(pid==0)
{
printf("In Child Process\n");
printf("Child process PID : %d\n",getpid());
printf("Parent Process PID : %d\n",getppid());
}
else
{
printf("In Parent Process\n");
printf("Child PID : %d\n",getpid());
printf("Parent PID : %d\n",getppid());
}
}
它输出:
在父进程中 儿童 PID : 2061 父 PID : 1830 在子进程中 子进程PID:2062 父进程 PID:1161但是如果我在 else 块中写了一个 wait() 函数,即:
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
int main()
{
pid_t pid;
pid=fork();
if(pid==0)
{
printf("In Child Process\n");
printf("Child process PID : %d\n",getpid());
printf("Parent Process PID : %d\n",getppid());
}
else
{
wait();
printf("In Parent Process\n");
printf("Child PID : %d\n",getpid());
printf("Parent PID : %d\n",getppid());
}
}
它输出-
在子进程中 子进程PID:2044 父进程 PID:2043 在父进程中 儿童 PID : 2043 父 PID : 1830我不明白为什么第一个代码中子进程返回的 pid 值与父 pid 不同。 在第二个代码中,它是相同的。有人能解释一下上述问题的原因吗?
【问题讨论】:
-
你有没有看过,哪个进程实际上是 1830 ?据我记得,如果父进程运行,并且仍然存在一个孤立的子进程,它会被进程“init”占用,它可能是 1830。
-
@icbytes
init进程总是进程 1。pid 1830 更可能是 shell 的 pid。 -
那不是 "init" ,谢谢。
标签: c linux unix process operating-system