进程什么时候被创建
- 批作业调度 (操作系统创建用户进程)
- 交互作业提交 (操作系统创建用户进程)
- 系统提供服务 (操作系统创建系统进程)
- 用户程序创建子进程 (用户程序创建用户进程) 用户通过调用fork()函数实现
进程家族树
- 父进程:执行过程中创建了其它进程的进程
- 子进程:被父进程创建的进程
- 子子进程…
fork()函数说明
函数原型 pid_t fork(void)
- 该函数包含于头文件unistd.h中。
- 函数功能:建立一个新的子进程。其子进程会复制父进程的数据与堆栈空间,并继承已打开的文件代码、工作目录和资源限制等。父进程的用户代码、组代码、环境变量、
函数返回值
- 如果fork()调用成功,则在父进程会返回新建立的子进程代码(PID),而在新建立的子进程中则返回0。
- 如果fork()失败则直接返回-1,失败原因存于errno中。失败的原因有三个:
1. 系统内存不够;
2. 进程表满(容量一般为200~400)
3. 用户的子进程太多(- -般不超过25个)。
父进程创建子进程
- UNIX中,父进程通过系统调用fork()创建子进程,子进程继承父进程资源,父子进程各自独立。
- 父子进程各自拥有自己的PCB、内存用户区、临时资源等,各自独立参与CPU调度
- 从fork中返回时,测试返回参数:
若值为0,则是子进程,可以转移到相应的用户程序中继续执行;
若值不为0 (子进程的PID),则是父进程,继续执行主程序。