Process 在执行fork()系统调用时,父进程是什么?

Process 在执行fork()系统调用时,父进程是什么?,process,operating-system,fork,Process,Operating System,Fork,我正在学习操作系统课程。 我目前正在学习有关流程管理的章节 假设我编写了这样的代码: void main(){ int pid = fork(); // Some code goes here } 这段代码基本上创建了一个子进程,它是父进程的副本。除了PID之外,所有进程之间都是相同的。父进程到底是什么?是执行中的C程序(运行a.out文件)吗?执行开始时,有一个进程。在fork()之后,有两个进程将在“Some code go here”处执行代码。因此,它实际上在执行for

我正在学习操作系统课程。 我目前正在学习有关流程管理的章节

假设我编写了这样的代码:

void main(){
    int pid = fork();
    // Some code goes here
}

这段代码基本上创建了一个子进程,它是父进程的副本。除了PID之外,所有进程之间都是相同的。父进程到底是什么?是执行中的C程序(运行a.out文件)吗?

执行开始时,有一个进程。在fork()之后,有两个进程将在“Some code go here”处执行代码。因此,它实际上在执行fork()调用时克隆了进程,克隆的进程将获得一个新的pid


原始进程称为父进程。

父进程是生成其他进程的进程-子进程。在example.c的main()中,使用fork():生成相同的进程。在您困惑的上下文中,相同的是,除非发生了将子进程与example.c分离的特定事件,否则两者都执行example.c中的指令。在子进程代码(pid<0)的一部分中,您可以使用exec系列函数将子进程与example.c分离


所以父级和子级都使用同一个程序来执行,并由fork的返回值分隔。fork之前和之后的区别在于,现在您已经将父代码和子代码放在了它们的特定位置

父进程是
fork
返回大于零的值的进程。或者,父进程是
getpid
getppid
返回与
fork
之前相同的值的进程。或者,它是可以使用
wait
恢复子级退出状态的过程。首先,父对象和子对象之间没有其他差异。如果你真的问“什么是过程?”那么请澄清。不,我知道过程是什么。让我困惑的是:进程,执行中的C程序本身是父进程吗?然后当我做fork()时,现在有两个进程在执行中处理这段代码,很抱歉,我无法理解“进程,执行中的C程序本身是父进程吗?”。每个进程都有一个正在执行的程序(除非它是僵尸),但进程和程序是两个独立的、不可比较的东西。(而且,由于我怀疑这是造成您混淆的关键,任何数量的进程都可以同时执行同一个程序。)(将“程序”与“a.out文件”区分开来是错误的,尽管在某些关键方面仍然不准确。)当fork()完成时,父进程将在子进程运行时停止执行?否,它们将同时运行,例如在两个处理器上。