进程的学习

进程基本概念:

1.进程:

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

2.进程相关命令:

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

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

        q退出 

    2.nice
      以指定优先级来运行进程       eg:nice -n 优先级 要执行的集成任务

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

    3.kill
      杀死指定的进程任务       eg:kill -9 进程PID 

      killall 
      杀死进程名对应的所有进程任务      eg: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.先来先执行,后来后执行
      2.高优先级调度算法
      3.时间片轮转调度算法(常用的)
      4.多级队列反馈调度算法
      5.负载均衡调度算法

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

时间片轮转调度:
1.宏观并行,微观穿行 -- 宏观上是一起执行文件,微观上是执行文件1,进行中断,并保护现场,
去执行2,中断,保护现场,去执行3....后回到文件1,恢复现场,接着执行....
2.每条程序的执行时间有限度,称为时间片,达到时间片的限度后跳转执行,若在限度之内执行完后跳转。跳转的文件根据文件的优先级来进行轮转。
3.保护现场是由PCB进程控制块存储,每一个文件进程度的存储都由PCB进程控制块保存,链表方式连接。

进程的状态:
       R     运行态,就绪态
       S     睡眠态/可唤醒等待态       eg:等待用户输入
       D     不可唤醒等待态         eg:U盘的插拔
       T     暂停态
       Z     僵尸态  (程序结束了,但是空间还没有被回收)
       X     结束态

6.进程相关的函数接口:

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

       父进程调用fork创建子进程,子进程拷贝父进程的文本段、数据段、系统数据段  
注意:不可以连用fork,会造成子进程拷贝两个fork,相当于四个进程。

      getpid
      pid_t getpid(void);
      功能:
        获得调用进程的PID号
      
      getppid
      pid_t getppid(void);
      功能:
        获得调用进程的PPID
创建一个父进程的2个子进程,子进程中打印自己的PID和父进程的PID,父进程中打印自己的PID和两个子进程的PID:

int main(void)
{pid_t pid;pid_t pid1;pid = fork();if(pid == -1){perror("fail to fork");return -1;}if(pid == 0){printf("z1 pid:%d ,fu pid:%d\n",getpid(),getppid());}else if(pid > 0){pid1 = fork();if(pid1 == -1){perror("fail to fork1");return -1;}if(pid1 == 0){printf("z2 pid:%d ,fu pid:%d\n",getpid(),getppid());}else if(pid1 > 0){printf("fu pid :%d ,z1pid:%d  , z2pid:%d\n",getpid(),pid,pid1);}}while(1){}
return 0;}

注意:要加\n出缓存区,不然就会一直输出的内容就会一直在缓存区

  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.hqwc.cn/news/493582.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IO进程:信号灯集

程序代码: sem.h: 1 #ifndef __SEM_H__2 #define __SEM_H__3 4 //创建信号灯集并初始化,semcount表示灯个数5 int open_sem(int semcount);6 7 //申请资源操作,semno表示灯的编号8 int P(int semid,int semno);9 10 //释放资源操作&#xff…

ClickHouse 指南(三)最佳实践 -- 跳数索引

Data Skipping Indexes Data Skipping Indexes 2 1、简介 影响ClickHouse查询性能的因素很多。在大多数情况下,关键因素是ClickHouse在计算查询WHERE子句条件时是否可以使用主键。因此,选择适用于最常见查询模式的主键对于有效的表设计至关重要。 然…

【基础知识】MPP架构和hadoop架构比对

架构比对 简单一句描述。 mpp架构,就是找一群和自己能力差不多的任一起做事,每个人做的事情是一致的。 hadoop架构,就是找一群能力差一些的人,但只需要他们每个人只做一部分工作。 举例说明 一个特色小饭店如何成为连锁餐饮巨…

力扣hot100题解(python版7-9题)

7、接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,…

软件运维维保服务方案-套用模板

软件运维维保方案-套用模板 项目情况 1.1 项目背景简述项目的来源、目的和重要性。说明项目的规模、预算和预期目标。 1.2 项目现状分析当前系统/软件的运行状态、存在的问题和潜在风险。提供最近一次的维护报告或相关统计数据。服务简述 2.1 服务内容明确运维服务的具体内容&…

黑马程序员——接口测试——day03

目录: Potman断言 Postman断言简介Postman常用断言 断言响应状态码断言包含某字符串断言JSON数据Postman断言工作原理Postman关联 简介实现步骤核心代码创建环境案例1案例2Postman参数化 简介数据文件简介编写数据文件 CSV文件JSON文件导入数据文件到postman读取数…

YOLOv9图像标注和格式转换

一、软件安装 labelimg安装(anaconda) 方法一、 pip install labelImg 方法二、 pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple/ pip install pyqt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple/ pip install lxml -i ht…

第10讲用户登录SpringSecurity查库实现

用户登录SpringSecurity查库实现 security包下新建MyUserDetailServiceImpl Service public class MyUserDetailServiceImpl implements UserDetailsService {AutowiredSysUserService sysUserService;Overridepublic UserDetails loadUserByUsername(String username) throw…

理解@Configuration和@Component注解的不同用途和作用范围

理解Configuration和Component注解的不同用途和作用范围 在Spring框架中,Configuration和Component是两个常见的注解,用于实现依赖注入和组件扫描等功能。虽然它们都是用于标识类的注解,但它们在作用和用途上有着明显的区别。本文将深入探讨C…

通过苹果快捷指令轻松赚钱!一个月赚得23000元!

今天要分享的项目是《通过苹果快捷指令轻松赚钱!一个月赚得23000元!》 这是一个利用苹果快捷指令进行自动记账的项目,我在小红书上一个月就赚了23000元!苹果自带的快捷指令几乎没有成本,但很多人愿意为此付费&#xf…

对话企企通CEO徐辉:数字采购何以搭建产业数字化“桥梁”?

站在产业的角度去思考问题,从互联生态的立场出发,做难而正确的事,赋能产业链上每一个玩家,同时为自己的商业模式创造更多的可能性。 作者|斗斗 出品|产业家 市场一变,整个产业能否在几天之内全部协同起来&#x…

车规级MCU的行业走向

1 主要厂家 车规级MCU(车用微控制器单元)的主要厂家包括: NXP半导体:NXP是全球领先的车规级MCU提供商之一,提供广泛的产品用于汽车控制和管理系统。英飞凌科技:作为汽车半导体的领导者之一,英飞…