叉子的工作

Working of fork

本文关键字:工作      更新时间:2023-10-16

当我们使用fork时,调用一个函数创建一个进程并返回两个pid(一个是父id,另一个是子id)。一个函数怎么可能返回两个值?我不明白,叉子到底是怎么工作的?

不是一个函数返回两个值。这是一个函数调用返回两次,在每个进程中返回一次,并且在两次返回中,每次返回一个值。父进程返回子进程的PID,子进程返回0。

返回两次是创建新进程的基本机制。

fork()不返回两个值。Fork()只返回一个值,但是它返回两次。它在父进程中返回一次,在子进程中返回一次。

对于父进程,成功时返回子进程的进程id。对于子进程,fork返回0,如果子进程想知道自己的进程id,可以使用getpid(),如果想知道父进程id,可以使用getppid()。

在fork()系统调用之后,有两个独立的进程执行相同的程序文本,但是具有像堆栈,数据和堆这样的段的单独副本。fork()返回的pid有助于区分我们是在父进程还是子进程中。

pid_t processId;
switch(processId = fork())
{
case -1:
    // Error. Handle error as fork() failed.
case 0:
    // Do actions specific to child.
default :
    // Do actions specific to parent.
}