操作系统---(15)父进程与子进程

进程什么时候被创建

  • 批作业调度 (操作系统创建用户进程)
  • 交互作业提交 (操作系统创建用户进程)
  • 系统提供服务 (操作系统创建系统进程)
  • 用户程序创建子进程 (用户程序创建用户进程) 用户通过调用fork()函数实现

进程家族树

  1. 父进程:执行过程中创建了其它进程的进程
  2. 子进程:被父进程创建的进程
  3. 子子进程…

fork()函数说明

函数原型 pid_t fork(void)

  1. 该函数包含于头文件unistd.h中。
  2. 函数功能:建立一个新的子进程。其子进程会复制父进程的数据与堆栈空间,并继承已打开的文件代码、工作目录和资源限制等。父进程的用户代码、组代码、环境变量、

函数返回值

  1. 如果fork()调用成功,则在父进程会返回新建立的子进程代码(PID),而在新建立的子进程中则返回0。
  2. 如果fork()失败则直接返回-1,失败原因存于errno中。失败的原因有三个:
    1. 系统内存不够;
    2. 进程表满(容量一般为200~400)
    3. 用户的子进程太多(- -般不超过25个)。
    操作系统---(15)父进程与子进程_第1张图片
    操作系统---(15)父进程与子进程_第2张图片

父进程创建子进程

  1. UNIX中,父进程通过系统调用fork()创建子进程,子进程继承父进程资源,父子进程各自独立。
  2. 父子进程各自拥有自己的PCB、内存用户区、临时资源等,各自独立参与CPU调度
  3. 从fork中返回时,测试返回参数:
    若值为0,则是子进程,可以转移到相应的用户程序中继续执行;
    若值不为0 (子进程的PID),则是父进程,继续执行主程序。

你可能感兴趣的:(操作系统)