【问题标题】:What is the parent process when we do a fork() system call?当我们进行 fork() 系统调用时,父进程是什么?
【发布时间】:2015-12-16 21:15:43
【问题描述】:

我正在学习操作系统课程。 我目前正在研究流程管理这一章。

假设我这样写代码:

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

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

【问题讨论】:

  • 父进程是fork返回大于零的值的进程。或者,父进程是getpidgetppid 返回与fork 之前相同的值的进程。或者,是进程可以使用wait来恢复子进程的退出状态。首先,父母和孩子之间没有其他区别。如果你真的在问“什么是过程?”这个问题。那么请澄清。
  • 不,我知道什么是进程。让我困惑的是:进程,C程序本身在执行父进程吗?然后当我现在执行 fork() 时,有两个进程在执行中处理此代码
  • 对不起,我无法理解“是进程,C 程序本身在执行父进程吗?”。每个进程都只有一个正在执行的程序(除非它是僵尸),但进程和程序是两个独立且无法比较的东西。 (而且,由于我怀疑这是您混淆的关键,任何数量 的进程都可以同时执行 same 程序。)
  • (用“a.out 文件”来识别“程序”,虽然在某些关键方面仍然不准确,但错误较少。)

标签: process operating-system fork


【解决方案1】:

当执行开始时,只有一个进程。在 fork() 之后,有两个进程将执行“Some code goes here”处的代码。所以它实际上在执行对 fork() 的调用时克隆了该进程,并且该克隆的进程获得了一个新的 pid。

原始进程称为父进程。

【讨论】:

  • 当fork()完成后,父进程会停止执行,而子进程正在运行?
  • 不,它们将同时运行,例如在两个处理器上。
【解决方案2】:

父进程是产生其他进程的进程-子进程。在 example.c 的 main() 中,您使用 fork(): 生成相同的进程。在您感到困惑的情况下,相同之处在于两者都执行来自 example.c 的指令,除非发生将子进程与 example.c 分离的特定事件。在子进程代码(pid

所以父母和孩子都使用相同的程序执行他们的执行,由 fork 的返回值隔离。 fork 之前和之后的区别在于,现在您可以将父代码和子代码放在它们的特定位置

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 2012-01-13
    • 2011-07-13
    • 1970-01-01
    • 2012-02-10
    • 1970-01-01
    • 2021-11-26
    相关资源
    最近更新 更多