C: fork() 子进程

标签 c shell fork

根据我正在阅读的教科书,下面的代码创建了 N 个子进程,它们将以独特的状态退出。

/* Parent creates N children */
for (i = 0; i < N; i++)
    if ((pid[i] = Fork()) == 0) /* Child */
        exit(100+i);

在教科书的前面,它指出以下代码将有 8 行输出:

int main(){
    Fork();
    Fork();
    Fork();
    printf("hello\n");
    exit(0);
}

这让我相信有 2^n 个子进程,其中 n 是调用 fork() 的次数。第一个代码只产生 N 个子进程(而不是 2^N)的原因是因为子进程每次都退出,所以在调用后续的 fork() 时,它只在父进程上运行?

最佳答案

每次成功调用 fork() 都会创建一个新进程。

在第一个例子中,子进程(fork()的返回值为0)调用exit();,这意味着他们不会调用下一个 fork()

在第二个例子中,每个子进程都继续 fork 。

关于C: fork() 子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21820243/

相关文章:

linux - Unix bash shell 脚本 - 在 'for' 循环中迭代数组

Shell:将 ssh 命令结果保存到本地变量

c - 在 Linux 中 fork

c - 从给定的 x86 程序集编写 C 函数

c 函数没有被调用?

c - 格式说明符 32 位 - 64 位

python - 'HOME' 的 Bash 环境变量设置返回 "pyenv: no such command ` sh-activate'"

Linux变量不维护

process - 难以理解 fork 逻辑

c - 如何实现具有多元素结构的链表?