fork系统调用的应用

7

fork用于创建调用它的进程的副本。 通常会接着调用exec函数族。 除此之外,还有其他用途吗? 我能想到一个。使用管道函数进行IPC。

5个回答

8
当然可以。在启动进程、进行一些数据初始化之后再生成多个工作线程是很常见的做法。它们在地址空间中都有相同的数据,且采用写时复制技术。
另一个常见的做法是让主进程监听TCP套接字,并为每个连接派生出一个子进程(fork())。这样新连接可以立即处理,而现有连接可以并行处理。
请注意,在fork()之后,两个进程都可以访问fork()之前存在的所有数据。

1
还有一种方法是“分叉”,让一个实例继续工作,而第二个则将计算状态检查点存储到稳定存储器中。 - Vatine
我猜这个任务不能仅通过多线程实现。是因为为了分配新的资源(TCP套接字),我们需要新的进程,而线程无法做到这一点,因为它们共享公共资源吗? - Nithish Inpursuit Ofhappiness

6
另一种使用fork的方法是从父进程中分离出来(回退到init,即进程1)。如果某个进程(例如具有pid 1111的bash)启动了myserver,该进程的pid为2222,则1111将成为其父级。假设2222进行了分叉,并且子进程得到了pid 3333。现在,如果进程2222退出,则3333将失去其父级,并且代之以init作为其新的父级。
此策略有时被守护程序用于启动,以便不与启动它的进程存在父子关系。另请参见此答案

1
如果您有某种服务器正在侦听传入连接,则可以分叉一个子进程来处理传入请求(这不一定涉及exec或管道)。

1

使用 fork 的一种方法是创建 Fork Bomb


0

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