当前位置: 首页 > news >正文

进程、进程命令、进程相关编程

  • 进程
    • 正在运行的程序,其运行过程中需要消耗内存和CPU

    • 程序和进程的区别
      • 程序:
        • 静态的数据集合,存储在硬盘空间
        • 程序运行起来可以产生进程(一个程序可以产生多个进程)
      • 进程:
        • 是一个程序动态执行的过程,需要消耗内存和CPU
        • 一个进程中可以执行多个程序
        • 进程具备动态生命周期,从产生到调度再到消亡
    • 进程的产生
      • 进程产生时,操作系统会为其分配0-4G的虚拟内存空间
        • 虚拟内存空间的3-4G为内核空间
          • 其功能有(文件管理、进程管理、内存管理等)
        • 栈区 (保存局部变量、保存函数的形参和返回值、保存函数的调用关系(保护现场恢复现场))
        • 堆区 (由开发人员手动分配、使用完要手动释放)
        • 数据区:
          • 数据段 (已初始化的全局变量、已初始化的静态变量)
          • bss段 (未初始化的全局变量、未初始化的静态变量(static)--->bss段初始时按位清0)、
          • 字符串常量区 (保存字符串常量)
        • 文本区 (存放指令代码、存放常量)
      • 父进程:产生子进程的进程称为父进程
      • 子进程:父进程产生出来的新进程即为该父进程的子进程
    • 进程的调度
      • CPU :数据处理速度快
        • 宏观并行,微观串行
      • CPU调度算法
        • 时间片轮转 :每个进程分配固定时间片,时间到就切换到下一个
        • 先来先服务 :按照进程到达就绪队列的顺序分配CPU
        • 最短作业优先 :选择预计执行时间最短的进程优先执行
        • 优先级调度 :每个进程分配一个优先级,优先级高的先执行
    • 进程的状态

      • 操作系统进程的三态图

        • 就绪态(ready)
          • 进程已获得除CPU外的所有必要资源
          • 等待被调度程序选中获得CPU执行权
          • 系统中可能有多个进程处于就绪状态,形成就绪队列
        • 运行态(running)
          • 进程获得CPU,正在执行
          • 单CPU系统中,任一时刻只有一个进程处于运行状态
          • 多核系统中,可能有多个进程同时处于运行状态
        • 阻塞态(blocked/waiting)
          • 进程因等待某种事件(如I/O完成、信号量等)而暂停执行
          • 即使CPU空闲,该进程也无法运行
          • 可能有多个阻塞队列,按等待事件类型分类
        • 状态转换
          • 就绪--->运行
            • 触发条件:被进程调度程序选中
            • 动作:分配CPU,开始执行
          • 运行--->就绪
            • 触发条件:
              • 时间片用完(分时系统)
              • 被更高优先级进程抢占
            • 动作:保存进程上下文,插入就绪队列
          • 运行--->阻塞
            • 触发条件:
              • 请求I/O操作
              • 等待资源/事件(如等待信号量)
              • 执行了阻塞式系统调用
            • 动作:主动放弃CPU,进入相应等待队列
          • 阻塞--->就绪
            • 触发条件:等待的事件发生(如I/O完成)
            • 动作:从等待队列移出,插入就绪队列
      • Linux进程状态
    • 进程的消亡
      • 进程执行结束(进程退出)
      • 回收进程资源空间
    • 进程相关的命令
      • PID :进程的ID号
      • PPID :父进程的ID号
      • 进程查看命令
        • ps(Process Status)

          • ps -aux | grep /a.out
          • | 管道:前面命令的输出作为后面命令的输入
          • grep :字符串查找,在输入中查找和后面字符串相关的数据
        • top(动态进程监控)

      • 进程树查看

  • 进程控制命令
    • 终止进程

  • 暂停进程

  • 进程查找命令

  • 后台进程管理

  • 进程相关编程
    • 进程创建
      • fork :pid_fork(void)
        • 功能:创建当前进程的子进程,子进程拷贝父进程的代码段、数据段、堆栈段,拷贝父进程PCB(进程控制块)中的部分内容:PID不拷贝

        • 注意:
          • 子进程完完整整拷贝父进程0-3G虚拟内存空间
          • 父子进程栈区、数据区、文本区、堆区完全独立,数据不共享
          • 要想共享数据,需要使用进程间通信方式实现
        • 返回值:
          • 父进程中返回子进程PID
          • 子进程中返回0
          • 出错返回-1
    • 进程调度(操作系统完成)
    • 进程终止
      • 正常终止方式:
        • return
        • void exit(int status); void _exit(int status)
          • exit(0):正常退出
          • exit(非0):由于进程产生了某种问题,需要主动退出程序
      • 回收资源空间
        • wait()、waitpid()
        • 僵尸进程:进程退出后,但其资源空间未被父进程回收
        • 如何避免僵尸进程产生:
          • 子进程退出后,父进程及时为其回收资源空间
          • 杀死父进程,让该进程成为一个孤儿进程,结束时被操作系统中的系统进程回收(init进程会自动回收)
            • 孤儿进程:父进程先消亡,其对应的子进程成为一个孤儿进程,会被系统进程所收养(守护类的进程)
http://www.dtcms.com/a/331085.html

相关文章:

  • 19. 什么是 TypedArray
  • Subarray Sums II
  • EtherCAT概念介绍
  • Python入门第1课:环境搭建与第一个程序“Hello World”
  • python学习DAY41打卡
  • 前端已死,AI技术正在重塑前端软件工程师
  • 护照查验接口牢筑跨境场景安全防线-JavaScript集成示例
  • Elasticsearch ABAC 配置:实现动态、细粒度的访问控制
  • 玩转Docker | 使用Docker部署JSON格式化工具ZJSON
  • Java-数构map和set
  • 高效解决 pip install 报错 SSLError: EOF occurred in violation of protocol
  • P5967 [POI 2016] Korale 题解
  • Transformer之多头注意力机制和位置编码(二)
  • Canon PowerShot D30相机 CHDK 固件 V1.4.1
  • 5.Ansible-playbook-模块介绍(知识点补充)
  • 【Postgresql】实现 PostgreSQL 全量审计日志:记录所有 SQL 操作及来源
  • 【C++】细说继承(2w字详解)
  • ROS机器人云实践案例博客建议和范文-AI版本
  • imx6ull-驱动开发篇24——Linux 中断API函数
  • MATLAB绘制各种心形曲线
  • window显示驱动开发—在混合系统中使用跨适配器资源
  • nginx-集成prometheus监控(k8s)
  • GitHub 热榜项目 - 日榜(2025-08-14)
  • 一、linux内存管理学习(1):物理内存探测
  • 京东商品列表API开发指南
  • OpenCV对椒盐处理后的视频进行均值滤波处理
  • Opencv 边界填充 图像运算 阈值处理 和图像平滑处理
  • 文件上传接口接收不到文件入参
  • 题解:P4777 【模板】扩展中国剩余定理(EXCRT)
  • Qt项目查找依赖库打包