将fork的returnin值保存在C中的变量中

时间:2017-09-16 19:00:33

标签: c fork

我对函数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

1 个答案:

答案 0 :(得分:0)

  

fork之后的可靠pid对于每个进程是不同的?

是的,这是您获得的新进程ID作为返回值。同时具有相同ID的进程不可能相同,因此每当您分​​叉时,通常会得到一个唯一的进程。

fork()调用内部克隆进程,包括所有可变内存内容(堆,堆栈,数据段)的副本。复制完成后,内核将恢复两个进程的执行,但会给出不同的返回值。

  

其中我无法理解为什么第一个printf的pid具有child的值。它不应该是父母的身份?

getpid()返回父项的ID,因为这是您现在正在执行它的上下文。在这个例子中,pid只是垃圾(未初始化的内存),所以无论你认为你看到的是什么,它都不是一个进程ID而只是一些随机内存内容。