1.关于fork()的描述
fork通过复制调用进程创建一个新进程,则这个新进程就叫做子进程,被调用的进程叫做父进程。子进程与父进程在不同的内存空间中运行。在调用fork()函数时,两个内存空间具有相同内容。其中一个进程执行的内存写、文件映射对另一个进程没有影响。
2.关于fork()返回值
当成功调用fork()时,在父进程中返回子进程的PID,且返回值为0.调用失败时,返回值为-1。如果没有创建新进程时,系统会返回一个非负整数。
3.代码编程实例
编译运行结果如下:
由运行结果可以看出,调用fork()函数后,在fork()之后的代码执行第一次时,fork()返回值即retpid=7080把值赋给父进程。执行第二次时,父进程创建子进程,retpid=0把值赋给子进程,而此时子进程的pid刚好等于fork()赋给父进程的返回值即retpid=7080。
4.对fork()的总结
通过简单的代码模拟服务器接收客户端发送的链接请求,从而创建新的进程。其运行结果如下:
子进程与父进程是互不影响的,同时在调用fork()后,linux存在两种拷贝。第一种是全拷贝,包括堆、栈、文件、I/O流,数据等等;第二种则是写时拷贝(Copy On Write)即COW,例如当子进程没有对程序中的初始化数据进行修改时,代码中所有的数据均是父、子进程所共有的;反之,子进程则会去拷贝父进程的中那个修改的数据。
创建子进程的目的:
这是个人对fork()学习的理解,也是提醒自己在学习这部分内容需要注意的地方,希望对你有帮助。