c - 操作系统(Unix)中的新进程创建

标签 c unix fork

如果我的问题看起来很愚蠢,我很抱歉。我对操作系统中的新进程创建有疑问。考虑以下简单的 C 代码:

//hello.c
#include <stdio.h>

int main()

    {
        printf("Hello World\n");
        return 0;
    }

什么时候用gcc编译。

gcc hello.c

现在执行可执行文件a.out

./a.out

现在我不明白在这种情况下如何创建New Process,谁调用fork()exec系统调用并且复制哪个进程以将 a.out 作为子进程?在 this example ,父进程显式调用fork系统调用来创建子进程,但在上面的hello.c代码中没有fork调用。

最佳答案

通常,父进程会发出 fork() 系统调用,创建一个具有(大部分)与原始进程相同属性的重复进程(例如,不同的进程 ID)。从那里开始,子进程 issues one of the exec family system calls用新的进程镜像替换其自身的进程镜像。 This is explained quite well on the Unix SE.

enter image description here

就您而言,shell 是父进程,您正在运行的“新程序”是最终调用 exec 的子进程。

关于c - 操作系统(Unix)中的新进程创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44572117/

相关文章:

python - bash Shell 脚本: how to read a file line by line and pass to a variable

bash - 管道 |重定向 < > 优先级

linux - Fork() linux 问题

c - fork() 从哪里开始

有人能解释一下这个简单的 C 字符比较函数是如何工作的吗?

c - 右移按位与

c - 如何在模运算之前键入 uint32 数组的强制转换元素?

java - Android 上的 JNI,如何将 int 从 c 传递到 java

linux - 为什么 ls 和 ls -l linux 命令之间的计数不同?

c - 当第二个子进程关闭读取管道末尾时杀死第一个子进程