在什么情况下会用到linux系统中fork()函数,请举例说明。

在什么情况下会用到linux系统中fork()函数,请举例说明。
学习linux系统编程,遇到fork()函数,对该函数工作原理一般讲解的都很详细。但有个疑问,在什么情况下会用到fork()函数?在什么情况下需要用fork()函数去生成一个与自己一样的子进程?有些例子对fork的返回值做判断并作出相应的处理,但还是不明白,fork返回子进程PID时意味着什么,返回父进程PID时意味着什么?请举个需要用到fork函数的例子。
分较少,但全部奉上。5分。
是不是可以这么理解,每启动一个进程,都要执行fork函数,去生成该进程的子进程,这是由linux系统进程管理机制决定的?

额........每启动一个进程并不一定要执行fork.fork只是系统最后封装的一个系统调用.你在程序里不使用fork的话.使用其它方式启动进程.就不是fork.fork族里有很多函数...............exec也可替换当前进程......系统内核里生成一个进程用的是clone这个函数.
就比如要盖个房子.一个人干,要先挖土再调水泥再摆砖头再盖墙这样一步一步做.但是如果有多个人.就是可以多个人同时做这些事,一个挖土,一个调水泥.一个摆砖头.这样就省了很多时间.进程也是如此.fork的作用就是创建新进程.
这么多人一起盖房子,总不能各自盖各自的,需要大家协调来做.不能土没挖好就摆砖,没放砖就抹水泥一样.这个时候需要一个工头来管理大家.工头通过每个人的名字来指挥每个人干活.进程就通过pid来指挥一个进程干活.工人需要知道自己的工头是谁,好向他报告碰到的情况.进程需要知道自己的父进程是谁报告自己的情况.
这样就明白fork为何要返回进程的id了吧?fork是不会返回父进程的id的.
工头找了一个新工人干活.从工头知道这个新工人的名字时刻开始,新工人就会投入这个团队一起干活了.fork返回pid的时候就表示这个进程在这个进程团队里了.工头可以直接告诉工人要干什么而不会让其他工人误以为这是自己的活.但是程序并没有这么智能.这个时候就需要有一个状态(if(!pid){....这是工人干的活...})表明这个工人的代码从什么位置开始,到什么位置结束.追问

是不是说每调用一次fork函数,就相当于招募了一个新工人,没调用fork函数的进程,相当于只有一个人在干活。
是招人干活还是自己干的依据是什么?程序员根据什么判断需不需要调用fork函数?

追答

是的.fork一次就相当与招募了一个新工人.但是招募的工人要做什么,和什么时候需要招募新工人都是由程序员自己判断的.
最见的linux的多进程应用场景就是网络服务了.比如http服务.这个服务能同时对上千个人进行服务.就是使用多进程(实际上是用线程池的方式,不过为了理解简单可以理解为多进程).http多进程是,一个人连接上来http为他打开一个进程提供服务(就是提供web页面).这个人一直未关闭web页面并且一直在页面进行新的请求.这个时候如果有另外一个人请求服务的话怎么办呢?如果是单进程的话.那就只能等上一个人结束页面操作.进程才能为这个人服务.但是如果是多进程的话.就不需要等另一个人是否完成操作了.直接新fork一个进程为新来的这个人提供同样的服务.

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答