进程 2月24日学习笔记

1.进程:


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

2.进程相关命令:
 

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

        PID:唯一识别进程的ID号(>0)
        优先级:在 Linux 系统中,优先级值范围一般为 -20 到 19,数值越低表示优先级越高;而在 Windows 系统中,优先级数值越高表示优先级越高,通常为 0 到 31。
        进程状态: 
           

  • R(运行态/就绪态):表示进程正在运行或者已经准备好运行,可被 CPU 调度执行。
  • 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.进程中虚拟地址和物理地址的关系

虚拟内存空间:每个进程都有自己独立的虚拟内存空间,这个空间大小一般是从 0 到 4GB。每个进程的虚拟地址空间都是相同的,这个空间中存放的是每个进程的代码,数据和堆栈等信息
    1. 0 - 4G虚拟内存空间只有一个
    2. 实际物理地址中每个进程空间独立
    3. 通过MMU内存映射单元,单一个进程执行时,将物理地址中的数据加载到虚拟地址中运行

 

实际物理地址:每个进程的虚拟地址空间在执行时需要映射到实际的物理地址空间。每个进程的物理地址空间是独立的,不同的进程之间彼此隔离,互不干扰。物理地址是实际存储器中的地址,存放着进程需要的代码,数据和堆栈等信息。

MMU 内存映射单元:MMU 是 CPU 中的一个硬件单元,负责虚拟地址到物理地址的转换。当一个进程运行时,MMU 会根据虚拟地址到物理地址的映射关系,将虚拟地址中的数据加载到对应的物理地址中执行。MMU 会维护一个页表(Page Table)来记录虚拟地址到物理地址的映射关系。

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号
      
      getppid
      pid_t getppid(void);
      功能:
        获得调用进程的PPID

  练习:
    创建一个父进程的2个子进程,子进程中打印自己的PID和父进程的PID
                            父进程中打印自己的PID和两个子进程的PID

#include "head.h"int main(void)
{pid_t pid1;pid_t pid2;pid1 = fork();if (-1 == pid1){perror("fail to fork");return -1;}if (0 == pid1){printf("子进程1 PID:%d PPID:%d\n", getpid(), getppid());}else if (pid1 > 0){pid2 = fork();if (-1 == pid2){perror("fail to fork");return -1;}if (0 == pid2){printf("子进程2 PID:%d PPID:%d\n", getpid(), getppid());}else if (pid2 > 0){printf("父进程 PID:%d child1PID:%d child2PID:%d\n", getpid(), pid1, pid2);}}while (1){}return 0;
}

  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://xiahunao.cn/news/2807147.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

容器镜像详解

1. 镜像组成 一个标准的OCI容器镜像由index, manifest, config, image layers这几个部分组成。 以docker镜像为例,下载的镜像文件保存在/var/lib/docker/目录下面 image/overlay2子目录下面保存着镜像相关的一些元数据 在下面的介绍主要以nginx:latest镜像为例子…

Ps:原色通道直方图(CMYK)

在 CMYK 颜色模式下,Photoshop 的“通道”面板中有青色、洋红、黄色及黑色四个原色通道。 与 RGB 颜色模式基于光的加法混合不同,CMYK 颜色模式基于颜料的减法混合,更适合反映实际印刷中油墨的使用情况。 默认情况下,CMYK 原色通道…

STM32 TCP实现OTA

芯片:stm32f407 开发平台:stm32cubeide 上位机开发平台:visual studio 2017 1. FLASH分配 将flash划分为四个部分: bootloader: 0x8000000-0x800ffff app1: 0x8010000-0x805ffff app2: …

Linux配置Maven环境变量

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

【尚硅谷】MybatisPlus 学习笔记(上)

目录 一、MybatisPlus简介 1.1、简介 1.2、支持数据库 二、入门案例 2.1、开发环境 2.2、创建数据库及表 创建表 添加数据 2.3、创建SpringBoot项目 初始化工程 导入依赖 idea中安装lombok插件 配置application.yml 启动类 实体类 添加mapper 测试 添加日志 …

算法沉淀——动态规划之斐波那契数列模型(leetcode真题剖析)

算法沉淀——动态规划之斐波那契数列模型 01.第 N 个泰波那契数02.三步问题03.使用最小花费爬楼梯04.解码方法 动态规划(Dynamic Programming,简称DP)是一种通过将原问题分解为相互重叠的子问题并仅仅解决每个子问题一次,将其解存…

应用回归分析:贝叶斯回归

贝叶斯回归是一种统计方法,它利用贝叶斯定理来更新对回归参数的估计。这种方法不仅考虑了数据的不确定性,还考虑了模型参数的不确定性,为预测提供了一个更加全面的框架。在本文中,我们将深入探讨贝叶斯回归的基本概念、如何实现它…

项目分享,正在开发的一款多商户家政平台服务小程序【商户端】页面截图-技术栈为uniapp可生成H5/APP/小程序

页面展示 商户端首页 【工作台】 此部分的功能逻辑如下: 工作台:商户的操作中心 基本信息管理:商户端的工作台允许商户维护自己的基本信息,包括上传头像、设置店名、查看入驻时间以及选择店铺类型(企业店铺或个人店…

http协议及httpd的使用

HTTP协议介绍 HTTP(HyperText Transfer Protocol,超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础设计HTTP最初的目的是为了提供一种远距离共享知识的方式,借助多文档进行关…

单片机tsm32城市环境污染监测与实现

国内经济增速的持续保持不但加快了城市化建设的步伐,同时也使得更多的人口聚集到大城市中求发展,大量的人口对衣食住行等方面的需求使得这些城市环境的污染问题逐渐加剧。当前各级政府虽然对城市环境污染问题越来越重视,但是因缺乏监测手段而…

Qt 设置隐式加载dll路径

在c++中DLL的加载方式有两种,显式加载和隐式加载。 隐式加载 在程序从开始运行时,就会按照系统中一定的搜索路径,寻找动态库,找到就自动加载它,才能成功运行程序,这些步骤,是系统自动完成的。 显示加载 我们对动态库的调用,是在代码中直接使用LoadLibrary,或其他加载函…

用买糖果的方式来理解正交匹配追踪(OMP)算法

在信号处理领域,压缩感知(Compressed Sensing)是一种能够从远少于传统奈奎斯特采样定理所要求的样本数目中重建稀疏信号的技术。压缩感知的理论基础在于一个前提假设,即许多自然信号都含有稀疏的表示,换句话说&#xf…

神经网络系列---权重初始化方法

文章目录 权重初始化方法Xavier初始化(Xavier initialization)Kaiming初始化,也称为He初始化LeCun 初始化正态分布与均匀分布Orthogonal InitializationSparse Initializationn_in和n_out代码实现 权重初始化方法 Xavier初始化(X…

Linux之ACL权限chmod命令

一. chmod命令 chmod命令来自英文词组change mode的缩写,其功能是改变文件或目录权限的命令。默认只有文件的所有者和管理员可以设置文件权限,普通用户只能管理自己文件的权限属性。 设置权限时可以使用数字法,亦可使用字母表达式&#xff0…

高考志愿选择辅助系统

高考志愿选择辅助系统 获取源码——》公主号:计算机专业毕设大全

STL - 并查集

1、并查集原理 在一些应用问题中,需要将n个不同的元素划分成一些不相交的集合;开始时,每个元素自成一个 单元素集合,然后按一定的规律将归于同一组元素的集合合并;在此过程中要反复用到查询某一 个元素归属于那个集合的…

java集合--List集合的基本用法

一、ArrayList集合 1.ArrayList集合的特点 2.ArrayList集合的一些方法 ①.add(Object element) 向列表的尾部添加指定的元素。 ②.size() 返回列表中的元素个数。 ③.get(int index) 返回列表中指定位置的元素,index从0开始。 public class Test {public static …

Beyond Compare4破解方法

方式一 第一种办法(也是最有效的) 删除C:\Users\用户名\AppData\Roaming\Scooter Software\Beyond Compare 4下的所有文件,重启Beyond Compare 4即可(注意:用户名下的AppData文件夹有可能会被隐藏起来) 方式二 删…

光谱数据处理:1.特征波长优选的不同方法与Python实现

首先,我们要理解为什么要对“光谱数据进行特征波长优选”以及这是在干嘛,光谱数据可以想象成一长串的彩色条纹,每种颜色对应一个波长,就像彩虹一样。这些颜色的条纹代表了从某种物质(比如植物、矿石或是食品&#xff0…

leet hot 100-1 两数之和

两数之和 原题链接思路代码 原题链接 leet hot 100-1 1. 两数之和 思路 可以把当前数字放到容器里面去 当我们遍历一个新的数字的时候 减一下与目标值的差 然后得到的结果在容器里面查看是否存在 时间复杂度O(n) 空间复杂度(n) 代码 class Solution { public:vector<…