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

嵌入式学习day25 Linux

进程基本概念:
1.进程:
    程序:存放在外存中的一段数据组成的文件
    进程:是一个程序动态执行的过程,包括进程的创建、进程的调度、进程的消亡

2.进程相关命令:
    1.top 
      动态查看当前系统中的所有进程信息(根据CPU占用率排序)

        PID:唯一识别进程的ID号(>0)
        优先级:Linux系统中数据高,优先级高(-20 - 19)  Windows系统中数值高,优先级高
        进程状态: 
            R   运行态/就绪态
            S   睡眠态/可唤醒等待态
            D   不可唤醒等待态
            T   暂停态
            Z   僵尸态
            X   结束态

        q退出 

    2.nice
      以指定优先级来运行进程

      示例:
        nice -n 优先级 要执行的集成任务

      renice 
      重新设定一个正在运行的进程的优先级
      
      示例:
        renice -n 优先级 进程PID 

    3.kill
      杀死指定的进程任务

      示例:
        kill -9 进程PID 

      killall 
      杀死进程名对应的所有进程任务

      示例:
        killall -9 进程名 

    4.ps -ef 
      查看当前时刻所有进程的信息

      PPID:父进程的ID号 

      ps -ef | grep a.out 

    5.pstree
      查看进程树关系

    6.ps -aux 
      查看当前时刻的进程信息

    7../a.out &
      将a.out任务放在后台执行
    
    8.jobs
      查看一个终端下后台执行的所有任务
    
    9.fg 编号
      将后台任务放到前台执行

3.进程的创建
    32bits

    一个进程在运行时,操作系统会为该进程分配 0 - 4G 虚拟内存空间,分为文本段、数据段、系统数据段

    文本段:
      也称为文本区,存放代码和指令
    
    数据段:
      也称为数据区,可以细分为:
            1.字符串常量区
            2.未初始化全局变量/静态变量
            3.已初始化全局变量/静态变量 
    
    系统数据段:
      包含堆区和栈区

   进程的虚拟内存空间:

4.进程中虚拟地址和物理地址的关系
    1. 0 - 4G虚拟内存空间只有一个,由进程轮流使用
    2. 实际物理地址中每个进程空间独立
    3. 通过MMU内存映射单元,单一个进程执行时,将物理地址中的数据加载到虚拟地址中运行

进程的物理内存地址


5.进程的调度:
    1.常见的调度算法:
      1.先来先执行,后来后执行
      2.高优先级调度算法
      3.时间片轮转调度算法
      4.多级队列反馈调度算法
      5.负载均衡调度算法

      时间片:
        1.CPU在一个任务中的运行时间称为一个时间片

    2.宏观并行,微观串行。  宏观上三个进程同时执行,微观上进程一  ->  进程二  ->  进程三

进程一执行一段时间,保护现场后再执行进程二,..........最后进程一恢复现场继续执行。

3.进程的状态:
        R     运行态、就绪态 
        S     睡眠态/可唤醒等待态 
        D     不可唤醒等待态 
        T     暂停态
        Z     僵尸态
        X     结束态

6.进程相关函数接口:


    1.进程的创建 
      fork 
      pid_t fork(void);
      功能:
        创建一个子进程,新创建的进程称为原来进程的子进程,原来的进程称为新进程的父进程
      参数:
        void 缺省
      返回值:
        成功子进程返回0 
        父进程返回子进程的PID 
        失败返回-1 

       父进程调用fork创建子进程,子进程拷贝父进程的文本段、数据段、系统数据段  

      getpid
      pid_t getpid(void);
      功能:
        获得调用进程的PID号(当前进程的ID号)
      
      getppid
      pid_t getppid(void);
      功能:
        获得调用进程的PPID(父进程的ID号)

 2.exit
    void exit(int status);
    功能:
      让进程结束
    参数:
      status:进程结束的状态
    返回值:
      缺省

    exit在主函数中使用和return效果一致
    exit会刷新缓存区

    _exit
    void _exit(int status);
    功能:
      让进程直接结束
    参数:
      status:进程结束的状态
    返回值:
      缺省

7.进程的消亡
  1.僵尸进程:
    进程代码执行结束,空间没有被回收,称为僵尸进程
  2.如何避免产生僵尸进程?
    1.让父进程先结束
    2.让父进程回收子进程空间

  3.孤儿进程:
      进程的父进程先结束,此时该进程称为孤儿进程,被系统进程收养,进程再结束时,会被系统进程回收进程空间

8.wait 
  pid_t wait(int *wstatus);
  功能:
    回收子进程空间,直到子进程结束,父进程才结束
  参数:
    wstatus:存放子进程结束状态空间的首地址
  返回值:
    成功返回回收到的子进程PID
    失败返回-1 

  1.wait函数具有阻塞功能
  2.wait函数具有同步功能

  WIFEXITED(wstatus)
  进程是否正常退出 

  WEXITSTATUS(wstatus)
  进程结束状态值

  WIFSIGNALED(wstatus)
  进程是否被信号杀死

  WTERMSIG(wstatus)
  获得杀死进程的信号编号
 

http://www.lryc.cn/news/308305.html

相关文章:

  • Oracle数据泵跨大版本迁移数据库
  • 如何在Win系统从零开始搭建Z-blog网站,并将本地博客发布到公网可访问
  • sawForceDimensionSDK安装,sigma7+ros
  • 全量知识系统问题及SmartChat给出的答复 之3
  • 【常用的 SVN 命令及简要示例】
  • ISP代理是什么?怎么用?
  • 微服务之qiankun主项目+子项目搭建
  • 双非二本找实习前的准备day2
  • 快速搭建宠物医院服务小程序的步骤,无需编程经验
  • 从0开始python学习-53.python中flask创建简单接口
  • 如何怎麼搭建高效的爬蟲全球代理IP池?
  • FinalShell连接Linux
  • 数据分析Pandas专栏---第十一章<Pandas数据聚合与分组(1)>
  • 【Linux】将程序的输出显示到屏幕,同时写入到log文件
  • MySQL(基础篇)——函数、约束
  • 【wails】(4):使用wails做桌面应用开发,整合chatgpt-web项目做前端,进行本地开发,web端也可以连调,使用websocket实现
  • 八股文打卡day24——数据库(1)
  • robots.txt 文件规则
  • 电脑WiFi共享给电脑的网口,另一终端可通过该网口进行上网。可用于wireshark抓设备终端的包。
  • 字节面试问题
  • 弹窗内容由后端返回,如何让点击按钮的事件交由前端控制?
  • [数据结构 C++] AVL树的模拟实现
  • 深入理解ngx_http_proxy_connect_module模块(下)
  • HTTP详解(HTTP的特点,状态码,工作原理,GET和POST的区别,如何解决无状态通信)!!!
  • 【QT+QGIS跨平台编译】之五十七:【QGIS_CORE跨平台编译】—【VECTOR_TILE生成】
  • 2024年腾讯云优惠政策_腾讯云TOP10优惠活动
  • SpringMVC 学习(二)之第一个 SpringMVC 案例
  • qt5与qt6的cmake区别
  • 【计算机网络】一些乱七八糟内容
  • 基于ESP32的MicroPython项目量产烧写指南