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 


        

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

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

相关文章

人脸表情识别系统项目完整实现详解——(三)训练MobileNet深度神经网络识别表情

摘要:之前的表情识别系统升级到v3.0版本,本篇博客详细介绍使用PyTorch框架来构建并训练MobileNet V3模型以进行实现表情识别,给出了完整实现代码和数据集可供下载。从构建数据集、搭建深度学习模型、数据增强、早停等多种技术,到模…

计算联合体union的大小

一:联合类型的定义 联合也是一种特殊的自定义类型,这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体) 比如:共用了 i 这个较大的空间 二: 联合的特点 …

MySQL--Buffer Pool

虽然说 MySQL 的数据是存储在磁盘里的,但是也不能每次都从磁盘里面读取数据,这样性能是极差的。为此,Innodb 存储引擎设计了一个缓冲池(Buffer Pool),来提高数据库的读写性能。 有了缓冲池后: …

Eclipse For ABAP:安装依赖报错

1.安装好Eclipse后需要添加依赖,这里的地址: https://tools.hana.ondemand.com/latest 全部勾选等待安装结束; 重启后报错:ABAP communication layer is not configured properly. This might be caused by missing Microsoft Visual C++ 2013 (x64) Runtime DLLs. Consu…

小程序云开发实战:通用企业产品信息展示小程序

之前做小程序都是自己搭建数据管理后台,比如我之前做的小程序:一搜就学,就是使用java来做管理后台,小程序做前端展示。但是对于简单的小程序来说,做一套管理后台有点拿大炮打蚊子,所以使用云开发就是不错的…

【开源】SpringBoot框架开发知识图谱构建系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 知识图谱模块2.2 知识点模块2.3 学生测评模块2.4 学生成绩模块 三、系统展示四、核心代码4.1 查询知识点4.2 新增知识点4.3 查询知识图谱4.4 查询学生成绩4.5 查询学生成绩 五、免责说明 一、摘要 1.1 项目介绍 基于J…

论文阅读:Forget-Me-Not: Learning to Forget in Text-to-Image Diffusion Models

Forget-Me-Not: Learning to Forget in Text-to-Image Diffusion Models 论文链接 代码链接 这篇文章提出了Forget-Me-Not (FMN),用来消除文生图扩散模型中的特定内容。FMN的流程图如下: 可以看到,FMN的损失函数是最小化要消除的概念对应的…

一文了解AI长文本工具:Kimi Chat;与ChatGPT比较对比

一文了解AI长文本工具:Kimi Chat;与ChatGPT比较对比 在人工智能领域,ChatGPT、Claude2.1和Kimi Chat都是备受关注的大型模型。它们在文本生成、理解和处理方面展现了强大的能力。本文将深入探讨这三个工具的核心功能、优劣势以及适用场景&am…

Markdown快速入门(常用技巧)

目录 说明常用书写技巧1.标题分级2.代码块3.字体4.引用语法5.分割线6.图片插入(本地/网络)7.超链接8.列表9.表格10.换行(两个空格)11.插入公式12.脚注 说明 markdown实际上类似于网页,可以根据喜欢设置其样式变化,创建…

iOS18系统中,苹果可能不再使用Siri,转用Gemini

生成式人工智能(Generative AI)是苹果公司近两年来默默投资的强大人工智能工具。 坊间流有多种传闻,官方最近终于曝光结果:苹果和谷歌正在谈判将 Gemini AI 引入 iPhone,预计将于今年在所有 iOS 18 设备上推出。 到目前…

GitHub Copilot怎么取消付费?

0. 前言 GitHub Copilot非常好用,还没有使用过的同学可以参考教程白嫖一个月:【保姆级】VsCode 安装GitHub Copilot实操教程 GitHub Copilot每月10美元的费用对于一些用户来说可能是一笔不小的开销。如果你已经完成了GitHub Copilot的免费试用&#xf…

【超详细图文讲解】如何利用VMware创建CentOS虚拟机(包括如何更改网络设置 + 远程访问虚拟机方法)

文章目录 前言1. 准备相关软件环境1.1 获取 ISO 镜像包1.2 VMware 的安装 2. 使用 VMware 安装 CentOS3. 初始化虚拟机4. 虚拟机网络的设置4.1 虚拟机的三种网络连接模式桥接模式NAT 模式仅主机模式 4.2 如何更改网络设置 5. 远程访问虚拟机的方法5.1 使用 cmd 进行访问5.2 使用…

React 系列 之 React Hooks(一) JSX本质、理解Hooks

借鉴自极客时间《React Hooks 核心原理与实战》 JSX语法的本质 可以认为JSX是一种语法糖,允许将html和js代码进行结合。 JSX文件会通过babel编译成js文件 下面有一段JSX代码,实现了一个Counter组件 import React from "react";export defau…

基于python+vue的幼儿园管理系统flask-django-php-nodejs

随着信息时代的来临,过去的传统管理方式缺点逐渐暴露,对过去的传统管理方式的缺点进行分析,采取计算机方式构建幼儿园管理系统。本文通过课题背景、课题目的及意义相关技术,提出了一种活动信息、课程信息、菜谱信息、通知公告、家…

网站安全:抵御网络攻击的几个安全措施

随着互联网的发展,网站安全成为每个企业和个人都必须重视的问题。黑客攻击不断增多,威胁着网站的稳定性和数据的安全。为了应对这一挑战,我们必须采取一系列的安全措施,确保网站的安全与稳定。 不过,关于在做好网络安全…

Docker基本操作

我们可以通过 docker --help 查看所有命令 我们可以通过docker hub 拉取 Docker hub官网链接 接着 输入 docker images 查看刚才拉取的nginx镜像 镜像常见操作 docker imagesdocker rmidocker pulldocker pushdocker savedocker load

Docker 搭建私人仓库

docker 搭建私人仓库有下面几种方式: 1、docker hub 官方私人镜像仓库2、本地私有仓库 官方私人镜像仓库搭建很简单(就是需要有魔法,否则就异步到第二种方法吧),只需要 login、pull、tag、push 几种命令就完事了。而本地私人镜像仓库则比较麻…

sentinel整合gateway实现服务限流

导入依赖: <dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><dependency><groupId>com.alibaba.csp</groupId><…

【Python脚本随手笔记】 ---基于鸿蒙系统LiteOS实现差分编译脚本(下篇)

💌 所属专栏:【Python脚本随手笔记】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! 💖 欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信 😘 😘 😘 文章目录 前言一、&…

mac下Appuim环境安装-持续更新中

参考资料 Mac安装Appium_mac电脑安装appium-CSDN博客 安卓测试工具&#xff1a;Appium 环境安装&#xff08;mac版本&#xff09;_安卓自动化测试mac环境搭建-CSDN博客 1. 基本环境依赖 1 node.js 2 JDK&#xff08;Java JDK&#xff09; 3 Android SDK 4 Appium&#x…