Linux学习-进程

目录

进程基本概念

进程相关命令

进程的创建    

进程的调度

进程相关函数接口

进程的消亡

实例:创建九个子进程

目录

进程基本概念

进程相关命令

进程的创建    

进程的调度

进程相关函数接口

进程的消亡

实例:创建九个子进程

exec函数族


进程基本概念


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

进程相关命令


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

        PID:唯一识别进程的ID号(>0)
        NI优先级: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 编号
      将后台任务放到前台执

进程的创建
    

32bits:

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

    文本段:
      也称为文本区,存放代码和指令
    
    数据段:
      也称为数据区,可以细分为:
            1.字符串常量区
            2.未初始化全局变量/静态变量
            3.已初始化全局变量/静态变量 
    
    系统数据段:
      包含 堆区(大概几G):1,程序员手动管理,空间要自己malloc和free

                         2,堆的增长方向是自低向高

              栈区(基本就是8MB):1,局部变量存放在栈区

                        2,未经初始化的随机值

                        3,代码执行到变量定义的时候开辟空间

                        4,超过变量作用域回收空间

                        5,栈的增长方向自高向低

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

进程的调度


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

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

    2.宏观并行,微观串行

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

进程相关函数接口


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

       父进程调用fork创建子进程,子进程拷贝父进程的文本段、数据段、系统数据段  ,除了内核不拷贝。

        宏观并行,微观是切换进行,具体根据情况。

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

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

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

    _exit
    void _exit(int status);
    功能:
      让进程直接结束,不会刷新缓存区。
    参数:
      status:进程结束的状态
    返回值:
      缺省

进程的消亡

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

实例:创建九个子进程

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:在系统指定目录下查找文件

    getenv
    char *getenv(const char *name);
    功能:
        获得环境变量名对应的值,也就是平时的PATH     
    
    setenv
    int setenv(const char *name, const char *value, int overwrite);
    功能:
        设置环境变量的值
    参数:
        name:环境变量名
        value:环境变量的值
        overwrite:非0 覆盖
                  0   不覆盖
    返回值:
        成功返回0 
        失败返回-1 


        

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Typecho博客后台登陆界面美化

登录界面: 食用方法: 备份 admin 目录 压缩包内容上传到 admin 目录内。 结构:网站根目录 /admin/login.php 结构:网站根目录 /admin/style 修改 login.php 第35行,把“季春二九管理后台”替换成自己的信息 清理缓存,开始体验新的…

罐头鱼AI矩阵获客批量混剪运营系统介绍

罐头鱼AI矩阵——智能运营系统助力抖音视频创作 随着社交媒体的普及,视频内容创作成为了企业营销的重要手段。为了帮助您更高效地进行视频内容创作和发布,我们推出了罐头鱼AI矩阵,一款集智能混剪、关键词生成、发布管理等功能于一体的全新运营…

交易的成功并非仅依赖于拥有强大的工具,而在于如何用好你的工具

任何领域伟大的成就往往源于个人不屈不挠地克服重重障碍的能力,这种毅力和决心并非普通人所具备,因此他们往往只能停留在普通和平凡的层面。 而对于那些渴望在交易领域取得卓越成就的人来说,坚持采用一套经过验证且有效的交易系统&#xff0c…

ArtDD 一键下载 掘金、CSDN、开源中国、博客园文章 文章的Chrome 插件

有想一键下载博客园、掘金、CSDN、开源中国等博客自己的文章到本地的可以使用这个插件 插件会根据当前页面链接自动分辨出文章所属平台,可能有些文章详情链接是不支持的,例如博客园存在很多个版本的文章详情页链接格式,想要支持所有的链接是…

设计模式之抽象工厂模式解析

抽象工厂模式 1)问题 工厂方法模式中的每个工厂只生产一类产品,会导致系统中存在大量的工厂类,增加系统的开销。 2)概述 a)产品族 和 产品等级结构 产品等级结构:产品的继承结构; 产品族&…

武汉星起航引领跨境电商新潮流,一站式孵化平台助力合作伙伴腾飞

在全球经济一体化的大趋势下,跨境电商以其独特的优势逐渐成为连接各国市场的桥梁。随着市场竞争的加剧,传统的经营模式已难以满足日益复杂的业务需求,合作伙伴迫切需要更为全面、专业的指导和支持。正是在这样的背景下,武汉星起航…

罐头鱼AI矩阵运营系统|视频批量混剪|矩阵获客

罐头鱼AI传单功能操作说明 个性化首页展示 登录状态一目了然灵活绑定账号数量快速查看最新上传视频素材和素材列表 抖音账号轻松绑定 明晰显示登录账号和已绑定账号灵活控制可绑定账号数量一键授权绑定抖音账号 账号管理列表 清晰管理查看绑定抖音账户列表 上传视频素材便捷管理…

洛谷_P2678 [NOIP2015 提高组] 跳石头_python写法

P2678 [NOIP2015 提高组] 跳石头 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) d, n, m map(int,input().split())data [0] for i in range(n):value int(input())data.append(value) data.append(d)def check(mid):now 0cnt 0for i in range(1,n2):if abs(data[now]-da…

Excel的数据分析工具

Excel的数据分析工具 会生成新的工作簿 全选--数据透视表 插入切片器 使用作图工具 可以继续插入条件切片

CodeMeter案例分享-工业自动化领域

德国威步遵行于“完美保护、完美授权、完美安全”的企业宗旨,为各个领域的软件商、设备商的数字资产提供强有力的保护,有效防止软件盗版、逆向工程、代码篡改、恶意破坏以及商业间谍活动,帮助企业把全新的商业模式与业务流程完美整合并获得可…

桌面日程安排软件,笔记本电脑常用软件有哪些?

在如今快节奏的社会环境中,时间仿佛成了比金子还要珍贵的资源。我们每个人都像是一名指挥官,需调度好每一刻光阴,使其发挥最大效益。而在这场与时间的较量中,一款优秀的桌面日程安排软件就像您的私人助理,帮您精准规划…

武汉星起航引领跨境电商新潮流,深耕亚马逊打造全方位合作新模式

在全球化的浪潮下,跨境电商已成为连接各国市场的重要桥梁,为无数企业带来了前所未有的发展机遇。在这一领域,武汉星起航电子商务有限公司以其独特的战略眼光和实战经验,成为引领行业发展的佼佼者。公司自2017年起便深耕亚马逊平台…

应用案例 | 基于三维机器视觉的销轴销套深框抓取上料解决方案

随着科技的不断发展,机器人技术不断革新,并逐渐渗透到各行业的各个环节。在机器人技术的帮助下,各行业的生产力不断增强,生产效率也得到了极大的提高。 销轴销套深框抓取是指在机械装配或生产过程中,对销轴和销套进行抓…

【数据可视化】Echarts官方文档及常用组件

个人主页 : zxctscl 如有转载请先通知 文章目录 1. 前言2. Echarts官方文档介绍3. ECharts基础架构及常用术语3.1 ECharts的基础架构3.2 ECharts的常用术语3.2.1 ECharts的基本名词3.2.2 ECharts的图表名词 4. 直角坐标系下的网格及坐标轴4.1 直角坐标系下的网格4.2…

今日问题:动态分配内存出错

2024.3.22 在搜素了许多文章和查阅了许多博客后依然没有找到问题所在&#xff0c;最后无意之间翻看以前的关于动态内存管理的代码后发现&#xff1a; 没加头文件&#xff1a;#include<stdlib.h> 苦笑不得了属于是 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio…

漏洞挖掘技术综述与人工智能应用探索:从静态分析到深度学习,跨项目挑战与未来机遇

在网络安全和软件工程领域中&#xff0c;将机器学习应用于源代码漏洞挖掘是一种先进的自动化方法。该过程遵循典型的监督学习框架&#xff0c;并可细化为以下几个关键步骤&#xff1a; 数据预处理&#xff1a; 源代码解析与清理&#xff1a;首先对源代码进行文本解析&#xff…

mysql 如何设计分库分表

在MySQL中设计分库分表的方法通常涉及到水平拆分与垂直拆分两种主要方式。 水平拆分&#xff1a; 按照某一列进行水平拆分&#xff1a; 可以根据某一列&#xff08;如用户ID、时间等&#xff09;的取值范围将数据拆分到不同的数据库或表中。基于哈希值的水平拆分&#xff1a;…

广告增量实时索引构建实践

本期作者 1.前言 在广告检索系统中&#xff0c;增量索引&#xff08;实时索引&#xff09;是一类常见的技术&#xff0c;用于使广告信息的变更及时生效。其中一种主要的思路即由检索系统消费广告更新数据流&#xff0c;实时更新内存索引&#xff0c;对此行业中已有很多优秀方案…

Flask 与小程序 的图片数据交互 过程及探讨研究学习

今天不知道怎么的&#xff0c;之前拿编程浪子地作品抄过来粘上用好好的&#xff0c;昨天开始照片突的就不显示了。 今天不妨再耐味地细细探究一下微信小程序wxml 和flask服务器端是怎么jpg图片数据交互的。 mina/pages/food/index.wxml <!--index.wxml--> <!--1px …

STM32CubeMX学习笔记22---FreeRTOS(任务创建和删除)

一、FreeRTOS简介 FreeRTOS 是一个可裁剪、可剥夺型的多任务内核&#xff0c;而且没有任务数限制。FreeRTOS 提供了实时操作系统所需的所有功能&#xff0c;包括资源管理、同步、任务通信等。 FreeRTOS 是用 C 和汇编来写的&#xff0c;其中绝大部分都是用 C 语言编写的&#x…