嵌入式学习记录——进程

进程的基本概念:

  1.进程:

                         程序:存放在外存中的一段数据组成的文件

                         进程:是一个程序动态执行的过程,包括进程的创建、进程的调度、进程的消亡

2.进程相关命令:

1.top :

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

                   PID:唯一识别进程的ID号(>0)

                   优先级:Linux系统中数据高,优先级高(-20 - 19)  Windows系统中数值高,优先级高

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

 2.nice  /  renice 

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

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

                示例:

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

                                  renice -n 优先级 进程PID 

 3.kill

                                杀死指定的进程任务

                 示例:

                                  kill -9 进程PID 

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

4.ps -ef 

                查看当前时刻所有进程的信息

5.pstree

                 查看进程树关系

6.ps -aux 

                 查看当前时刻的进程信息

 7../a.out &

                将a.out任务放在后台执行

8.jobs

                查看一个终端下后台执行的所有任务

9.fg 编号

                将后台任务放到前台执行

3.进程的创建

        一个进程在运行时,操作系统会为该进程分配 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号

 getppid

   pid_t getppid(void);

      功能:
        获得调用进程的PPID

2.1 exit

 void exit(int status);

    功能:
      让进程结束

    参数:
      status:进程结束的状态

    返回值:
      缺省

exit在主函数中使用和return效果一致

 exit会刷新缓存区

2.2 _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)
  获得杀死进程的信号编号

9. exec函数族

    extern char **environ;

    int execl(const char *path, const char *arg, ...
                    /* (char  *) NULL */);
    int execlp(const char *file, const char *arg, ...
                    /* (char  *) NULL */);
    int execle(const char *path, const char *arg, ...
                    /*, (char *) NULL, char * const envp[] */);
    int execv(const char *path, char *const argv[]);
    int execvp(const char *file, char *const argv[]);
    int execvpe(const char *file, char *const argv[],
                    char *const envp[]);

    功能:
        利用进程空间执行另外一份代码

    l:参数以列表形式传递
    v:参数以指针数组形式传递
    e:更新环境变量
    p:在系统指定目录下查找文件

    1.getenv

    char *getenv(const char *name);
    功能:
        获得环境变量名对应的值

 2. setenv

    int setenv(const char *name, const char *value, int overwrite);

    功能:
        设置环境变量的值

    参数:
        name:环境变量名
        value:环境变量的值
        overwrite:非0 覆盖
                  0   不覆盖

    返回值:
        成功返回0 
        失败返回-1 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/723199.shtml

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

相关文章

computed和methods的区别

computed和methods在Vue.js中都是用于处理数据和逻辑的方法,但它们之间存在一些重要的区别。 缓存机制:computed属性是基于它们的依赖进行缓存的。只有当它的相关依赖发生改变时才会重新计算。这意味着只要计算属性依赖的响应式属性没有发生变化&#x…

Android9-W517-使用NotificationListenerService监听通知

目录 一、前言 二、前提 三、方案 方案一 方案二 方案三 方案四 方案五 方案六 方案七 四、关于NotificationListenerService类头注释 五、结论 一、前言 NotificationListenerService可以让应用监听所有通知,但是无法获得监听通知的权限,如…

HTML标签语义化,前端开发学习计划

正文 HTML中的标签从闭合的角度可以分为闭合标签和空标签。而HTML中大部分标签都是闭合标签&#xff0c;其他少数为空标签&#xff1b; 常见的空标签&#xff1a; <input />、 <img />、 <area />、 <base />、 <link />等 HTML中对标签另一种…

QT国际化,将所有中文用tr函数包裹

cmake: # #设置qm文件输出位置 set_source_files_properties(adSoft_ch.ts adSoft_en.ts PROPERTIES OUTPUT_LOCATION "${CMAKE_SOURCE_DIR}/l2_viewer/dist/translations") #生成翻译文件 qt_add_lupdate(${PROJECT_NAME} TS_FILES adSoft_ch.ts adSoft_en.ts) # 生…

修改一个教材上的网站源码使它能在www服务器子目录上正常运行

修改一个教材上的网站源码&#xff0c;使它能在www服务器子目录上正常运行。 该网站源码是教材《PHPMySQL网站开发项目式教程》上带的网站源码。该源码是用 php html 写的。该源码包含对mysql数据库进行操作的php代码。以前该网站源码只能在www服务器的根目录上正常运行&…

uniapp 小程序AP配网

一、TCPSocket.js 封装TCP协议 class socket {constructor() {this.connection {};}// 创建一个TCP实例establish(monitor) {this.connection wx.createTCPSocket();this.connection.connect({ address: "192.168.1.1", port: 9100 });}// 发送消息connect(messag…

人工智能AI网站推荐

排名部分先后: arXiv: https://arxiv.org/ - arXiv 是一个由康奈尔大学维护的预印本(Preprint)服务器,研究人员可以在这里分享其最新的科学研究成果,包括人工智能领域的论文。 IEEE Xplore: IEEE Xplore - IEEE Xplore 是IEEE(电气和电子工程师协会)提供的数据库,收录了…

C语言数据结构与算法——深度、广度优先搜索(DFS、BFS)

目录 一、深度优先搜索&#xff08;Depth-First-Search 简称&#xff1a;DFS&#xff09; 无向图的深度优先搜索 有向图的深度优先搜索 二、广度优先搜索&#xff08;Breadth-First-Search 简称&#xff1a;BFS&#xff09; 无向图的广度优先搜索 有向图的广度优先搜索 深…

【工具】PIL图片颜色处理

使用前置函数&#xff0c;用于图片效果显示 from PIL import Image, ImageOps, ImageEnhance import matplotlib.pyplot as pltclass SHOW:def __init__(self):self.idx 0# 创建宽10英寸、高90英寸self.fig plt.figure(figsize(10,90))def add(self, img, title):self.idx …

【JavaEE】_Spring MVC项目之使用对象传参

目录 1. 使用对象传参 2. 后端参数重命名问题 2.1 关于RequestPara注解 本专栏关于Spring MVC项目的单个及多个参数传参一文中&#xff0c;已经介绍过了对于不同个数的参数传参问题&#xff0c;原文链接如下&#xff1a; 【JavaEE】_Spring MVC 项目单个及多个参数传参-CSD…

HTML笔记1

1&#xff0c;标签的写法 <strong>加粗内容</strong> <hr> 2&#xff0c;快速生成骨架 !加[Tab] <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content&…

2024高频前端面试题 Vue2 和 Vue3 篇

* Vue2 和 Vue3的区别&#xff1a; 1&#xff09;双向数据绑定原理的区别 2&#xff09;根节点的不同 Vue2只能一个根节点 Vue3在组件中可以放置多个根节点 3&#xff09;Vue3中采用composition API vue2:采用的选项型API(opsition API) vue3:采用的组合型API(composition A…

分类算法入门:以鸢尾花数据集为例

近两年人工智能技术蓬勃发展&#xff0c;OpenAI连续放出ChatGPT、Sora等“王炸”产品&#xff0c;大模型、AIGC等技术带来了革命性的提升&#xff0c;很多人认为人工智能将引领第四次工业革命。国内各大互联网公司也是重点投资布局&#xff0c;从个人角度来说要尽快跟上时代的潮…

Node.js最准确历史版本下载(以下载Node.js16.17.1版本为例)

先进入官网:Node.js https://nodejs.org/en 括号中LTS代表稳定版本. 嫌其他冗余博客帖子多&#xff0c;找起来费眼睛,可以到/release下载:Node.js,在blog后面加/release https://nodejs.org/en/blog/release/ 点击next翻页,跟上面同样的步骤

echarts柱状图可鼠标左击出现自定义弹框,右击隐藏弹框并阻止默认右击事件

每项x轴数据对应有两条柱图和一条阴影效果是学习其它博客得到的效果&#xff0c;这个是学习的原文链接&#xff1a;echarts两个合并柱体&#xff08;普通柱状图象形柱图&#xff09;共享一个柱体阴影 因为这次情况比较特殊&#xff0c;不仅需要自定义弹框内容&#xff0c;而且…

JAVA中YML:几个用法

项目有一些配置文件&#xff0c;ini、prop类型的配置文件都考虑过后&#xff0c;还是选择yml文件&#xff0c;如上图&#xff1a;xxconfig.yml。 要求&#xff1a; 1、允许实施人员手动配置 2、配置文件要能轻便的转化为一个JAVA对象 3、程序启动后&#xff0c;打印这些配置项&…

DQL语言学习(2024/3/5)one

1.基础查询&#xff1a; select 查询列表 from 表名&#xff1b; 查询列表可以是&#xff1a;①表中的字段、②常量值、③表达式、④函数 ①查询表中的单个字段&#xff0c;多个字段&#xff0c;所有字段 select *from 表名&#xff1b; ③查询表达式: select 100*98; ④…

在ubuntu16上用dkpg安装vscode 出现错误

Could not parse file "/usr/share/applications/Qt5.12.9.desktop": Key file contains line ktop Entry] which is not a key-value pair, group, or comment dpkg: 依赖关系问题使得 code 的配置工作不能继续&#xff1a;code 依赖于 libc6 (> 2.28)&#xff1…

图论相关内容

建图 邻接矩阵 void tu1() {cin >> n >> m;for (int i 1; i < m; i) {int u, v;cin >> u >> v;//int w;cin>>w;--->边权mp[u][v] 1;//w//mp[v][u] 1;//w --->无向图} } 邻接表 void tu2() {vector<vector<int>>adj(…

【QT】QMainWindow介绍

QMainWindow Label&#xff1a;可以放静态/动态图片/链接 菜单栏工具栏浮动窗口和核心部件状态栏 Qdialog 模拟对话框非模拟对话框标准对话框和文件对话框 在创建文件时&#xff0c;路径一定不能有中文&#xff0c;否则会报错 双击下面的 Line Edit&#xff1a;只能显示一…