与 fork return 值相关的混淆

Confusion related to fork return value

我正在阅读有关 fork() 系统调用的内容,它指出子进程的 fork() 的 return 值为 0。

我的问题是如果代码中有多个 fork() 系统调用怎么办。那么肯定会创建多个子进程,并且它们的 pid = 0.

但是 pid 应该是唯一的不是吗?

fork在parent中的输出是新创建进程(child)的进程ID,在child中是0,假设没有错误。如果有错误forkreturns-1而没有child。这用于轻松指示 fork 之后的过程是 child 还是 parent,因为只有零表示 child(请参见下面的代码)。然而,child 进程 ID 不为零。 child可以通过函数getpid.

获取其进程ID
int res;
if((res = fork())) {
  // In parent, should check if res is -1, if it is fork failed
}
else {
  // In child
}