后台开发核心技术与应用实践读书笔记(十)

本文深入解析进程结构,探讨代码段、数据段与堆栈段的功能,详解程序如何转化为进程,及进程的创建与结束机制。阐述fork函数特性,对比exit与return、_exit的区别,剖析僵尸进程与孤儿进程的概念,介绍守护进程的创建步骤与作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

后台开发核心技术与应用实践读书笔记(十)

第10章 进程

10.1 程序与进程

  1. 进程结构:
    1. 代码段:存放程序代码的数据,数个进程运行同一个程序可以使用同一个代码段
    2. 数据段:存放全局变量、常量、静态变量
    3. 堆栈段:用于函数调用,存放函数参数与局部变量。另外还包括了PCB,它位于继承核心堆栈的底部不额外分配空间,是进程的唯一标志。系统通过PCB对进程进行管理和调度
  2. 程序转化为进程的步骤
    1. 内核将程序读入内存,为程序分配内存空间
    2. 内核为该进程分别进程标志符(PID)和其他资源
    3. 内核为进程保存PID及相应的状态和信息,把进程放到运行队列中等待执行,程序转化为进程后就可以被操作系统的调度程序调度执行了

10.2 进程的创建于结束

​ 创建的两种方式:操作系统创建、父进程创建

  1. fork()函数创建进程。
    1. 调用一次返回两次,有三种不同的返回值
      1. 在父进程中,fork返回新创建子进程的进程ID;
      2. 在子进程中,fork返回0;
      3. 如果创建出错,fork返回-1
    2. 子进程与父进程的关系
      1. 子进程与父进程允许顺序是不确定的,故可以在父进程中休眠2s保证子进程先运行
      2. 实际上,子进程完全复制了父进程的地址空间内容(包括数据段与堆栈段),但是共用代码段,因为代码段只是可读的不存在修改的情况
  2. 进程的结束exit()函数
  3. exit是函数,带参数,执行完后把控制权交给系统;return是函数执行完后的返回,执行完后把控制权交给调用函数
  4. exit是正常终止进程;abort是异常终止
  5. exit()会将缓冲区的数据写完后再退出;_exit()函数直接退出

10.3 僵尸进程

  1. 孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
  2. 僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中

10.4 守护进程

  1. 在Linux或者UNIX操作系统中在系统引导的时候会开启很多服务,这些服务就叫做守护进程(脱离终端在后台运行的进程)
  2. 生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件
  3. 一个简单的守护进程创建的步骤
    1. 创建子进程,父进程退出(使子进程成为孤儿进程)
    2. 在子进程中创建新的会话(脱离控制终端)
    3. 改变当前目录为根目录
    4. 重设文件权限掩码
    5. 关闭文件描述符
    6. 守护进程的退出

索引

  1. 第 1 章 C++常用的编程技术
  2. 第 2 章 面向对象C++
  3. 第 3 章 常用的STL使用
  4. 第 4 章 编译
  5. 第 5 章 调试
  6. 第 6 章 TCP协议
  7. 第 7 章 网络IO模型
  8. 第 8 章 网络分析工具
  9. 第 9 章 多线程
  10. 第 10 章 进程
  11. 第 11 章 进程间通信
  12. 第 12 章 HTTP协议
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值