如果我的问题看起来很愚蠢,我很抱歉。我对操作系统中的新进程创建有疑问。考虑以下简单的 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.
就您而言,shell 是父进程,您正在运行的“新程序”是最终调用 exec
的子进程。
关于c - 操作系统(Unix)中的新进程创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44572117/