fork函数

本文详细解析了Unix系统中fork函数的原理与应用,探讨了其作为进程创建唯一方法的重要性,以及如何通过调用fork实现子进程的创建和执行。文章还介绍了fork函数的两种典型用法,包括网络服务器的并发处理和shell程序执行新命令。
摘要由CSDN通过智能技术生成

5.1 fork函数

fork函数是unix唯一的进程创建方法

#include "unistd.h"

pid_t fork(void);
                /*在子进程中为0,在父进程中为子进程的ID,若出错则为-1*/

fork在子进程返回0而不是父进程的进程ID的原因是:任何子进程只有一个父进程,而且子进程总是可以通过调用getppid取得父进程的进程ID。相反,父进程可以有许多子进程,而且无法获取各个子进程的进程ID。如果父进程想要跟踪所有子进程的进程ID,那么它必须记录每次调用fork的值。

5.1.1 fork有两个典型的用法:
  1. 一个进程创建一个自身的副本,这样每个副本都 可以在另一个副本执行其他任务的同时处理各自的某个操作。 这是网络服务器的典型用法;

  2. 一个进程想要执行另一个程序。既然创建新进程的唯一办法是调用fork, 该进程于是首先调用fork创建一个自身的副本,然后另一个副本(通常为子进程)调用exec把自身替换成新的程序。 这是shell之类程序的典型用法;

5.1.2 fork函数做了什么?

使用 fork() 函数得到的子进程是父进程的一个复制品,它从父进程处继承了整个进程的地址空间:包括进程上下文(进程执行活动全过程的静态描述)、进程堆栈、打开的文件描述符、信号控制设定、进程优先级、进程组号等。子进程所独有的只有它的进程号,计时器等(只有小量信息)。因此,使用 fork() 函数的代价是很大的。
image

简单来说, 一个进程调用 fork() 函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己,并且执行特定的业务。

image

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值