fork用于创建其调用的进程副本。 通常会调用exec系列函数。 除此之外还有叉子的用法吗? 我能想到一个。用管道功能做IPC。
答案 0 :(得分:6)
当然可以。启动进程,进行一些数据初始化然后生成多个worker是很常见的。它们的地址空间都有相同的数据,而且它是Copy On Write。
另一个常见的事情是让主进程为每个进入的连接侦听TCP套接字和fork()。这样就可以在并行处理现有连接时立即处理新连接。
我认为你忘了在fork()之后,两个进程都可以访问fork()之前进程中存在的所有数据。
答案 1 :(得分:5)
fork的另一个用途是从父进程分离(回退到init,进程1)。如果某个进程,比如使用pid 1111进行bash,则启动myserver获取pid 2222,它将有1111作为父进程。假设2222分叉和孩子获得pid 3333.如果现在进程2222退出,3333将松开其父代,而不是它将init作为其新父代。
这种策略有时在启动时由deamons使用,以便与启动它的进程没有父关系。另请参阅this answer。
答案 2 :(得分:1)
fork的“用法”是创建Fork Bomb
答案 3 :(得分:0)
如果您有某种服务器侦听传入连接,您可以派生子进程来处理传入请求(不一定涉及exec或管道)。
答案 4 :(得分:0)
我写了一个小壳,它装满了叉子(是的,这是exec ..),特别是对于管道元素。 wikipedia page on pipe