2009-08-28 107 views
3

fork用于创建从其调用的进程的副本。 这通常是在调用exec系列函数之后进行的。 除此之外还有其他叉子的用法吗? 我能想到一个。用管道功能做IPC。fork系统调用的应用程序

回答

0

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

5

当然可以。开始一个过程,做一些数据初始化,然后产生多个工作者是很常见的。它们在地址空间中都有相同的数据,并且是写入时复制。

另一个常见的事情是让主进程监听每个连接的TCP套接字和fork()。这样,可以在现有连接并行处理时立即处理新连接。

我想你忘记了在fork()之后,两个进程都可以访问fork()之前的进程中存在的所有数据。

+0

Yes Ofcourse。谢谢。 – Ankur 2009-08-28 06:58:06

+1

还有“分叉,让一个实例继续工作,第二个检查点计算状态稳定存储”。 – Vatine 2011-04-03 08:39:11

+0

我想这不能用多线程来实现..是因为为了分配新的资源(TCP套接字)我们需要新的进程和线程本身不能做到这一点,因为它们共享公共资源? – 2013-06-26 16:21:05

4

fork的另一个用途是从父进程中分离(回退到init,进程1)。如果有一些进程,比如说带有1111的bash,启动获取pid 2222的myserver,它将有1111作为父进程。假设2222分叉和孩子获得pid 3333.如果现在进程2222退出,则3333将松开其父节点,而是将init作为其新父节点。

启动时,deamons有时会使用此策略,以便与启动它的进程没有父级关系。另见this answer。叉的

0

我已经写了一个小的外壳,并且它是完整的叉的(是这是EXEC ..),特别是对于管道元件。 wikipedia page on pipe