我对函数fork返回的值有点困惑。我了解价值0
适用于child
流程,价值>0
适用于parent
流程。
我有以下代码
int main()
{
int pid;
pid = fork();
if(pid == 0)
//DO SOMETHING
else
//DO SOMETHING ELSE
return 0;
}
对于每个进程,fork之后的有效pid
是不同的?
我无法理解它是如何改变价值的。我有第二部分代码
int main()
{
int pid;
if (pid == 0)
{
return 5;
}
printf("parent = %d waits for child = %d ", getpid(), pid);
waitpid(pid, NULL, 0);
printf("child terminates!")
return 0;
}
我无法理解为什么第一个printf
上的pid具有child的值。它不应该是父母的id
?
答案 0 :(得分:0)
fork之后的可靠pid对于每个进程是不同的?
是的,这是您获得的新进程ID作为返回值。同时具有相同ID的进程不可能相同,因此每当您分叉时,通常会得到一个唯一的进程。
在fork()
调用内部克隆进程,包括所有可变内存内容(堆,堆栈,数据段)的副本。复制完成后,内核将恢复两个进程的执行,但会给出不同的返回值。
其中我无法理解为什么第一个printf的pid具有child的值。它不应该是父母的身份?
getpid()
返回父项的ID,因为这是您现在正在执行它的上下文。在这个例子中,pid
只是垃圾(未初始化的内存),所以无论你认为你看到的是什么,它都不是一个进程ID而只是一些随机内存内容。