Linux分叉的目的是什么?

3
在fork()中,当创建子进程时,通常父进程会等待子进程完成,所以我想知道如果子进程必须空闲地等待自己完成工作而不是自己完成工作,那么为什么要创建子进程呢?我尝试阅读一些相关资料,但反而让我更加困惑。

1
这是您创建的一个单独的进程 - 不仅仅是一个线程。它就像启动一个新程序。如果我们只使用一个进程,那么我们回到了80年代初期或原始微控制器时代。 - Jens Munk
从阅读Fork (system call)开始,然后阅读Advanced Linux Programming - Basile Starynkevitch
1个回答

5
你有些困惑:父进程可能会“等待”子进程,但并不意味着在等待期间它不做任何事情。父进程会先执行自己的任务,然后调用wait。如果子进程已经完成,wait会立即返回;否则,父进程可能会处于空闲状态(即未被操作系统安排执行)一段时间,直到子进程真正完成。
举个例子:绿色的父进程分叉了黄色的子进程。子进程可能在父进程等待之前或之后完成: processes 有些情况下,父进程需要什么也不做,例如它产生一些工作进程,然后等待它们全部完成,因此只是充当一个管理者...

哇,这个方案真的很清晰,感谢你花时间制定它。所以我理解,fork使得多进程成为可能,并且一系列的进程可以在比通常情况下更短的时间内完成。 - Rage91
@Rage91 这就是想法。如果您只有1个CPU,则父进程和子进程将交替获得几毫秒的处理器时间;内核负责调度此过程(调度本身需要几微秒)。在具有多个处理器的机器上,内核可能(实际上,应该)在第二个CPU上运行子进程,并且真正并行地完成工作,因此更快。 - David Tonhofer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接