Linux基础之进程的基本概念

目录

一、进程的基本概念

1.1 什么是进程

1.2 PCB的概念

1.3 进程的查看

1.3.1 查看进程方式一

1.3.2 查看进程的方式二

1.4 父进程与子进程


一、进程的基本概念

1.1 什么是进程

进程是什么?

课本概念:程序的一个执行实例,正在执行的程序等。
内核观点:担当分配系统资源( CPU 时间,内存)的实体。

这个概念比较的官方,等会我可以给大家讲一讲我是怎么去理解进程这个概念的。

1.2 PCB的概念

在说PCB这个概念之前,我们首先来认识一下,一个程序是如何被我们的CPU所执行的。

       想必大家都有听说过一句话,叫做 “程序被加载到内存上了”。这是什么意思呢,为什么程序要被加载到内存上呢?根据我们的冯诺依曼结构,一个程序原本是被保存在磁盘上的,当要执行这个程序时,其就会被操作系统拷贝到内存上,程序在被拷贝过来之前,操作系统就已经在其上运行了,一个操作系统上一定会存在很多的“进程”,那操作系统要不要管理这些进程呢,肯定是要的,那怎么去管理呢,"先描述,在组织"(上节所说),那又因为操作系统是由c写的,那我们用什么去描述这个进程呢?用一个包含进程各种属性的结构体。

而这个结构体我们就叫做PCB,process control block(进程控制块)

Tips:在Linux中,PCB又可以叫做 struct_task。

这里用一张图给大家描述一下这个过程。

那么这些结构体里面会有些什么内容呢,我们可以大概猜测一下:

struct PCB
{
   //标识符
   //状态
   //优先级
   //内存指针,指向代码
   //上下文数据
   struct PCB* next;  
}

 这些内容我们之后会逐渐学习到,这里先不过多赘述。
       再有了PCB之后,那么操作系统对我们进程的管理,就变成了对我们PCB链表的管理(增删查改)。
       那这里我们就可以这样去理解我们的进程。

进程=可执行程序 + 内核数据结构(PCB)

1.3 进程的查看

       首先我们的进程有其自己的标识符,叫做 PID,我们可以通过这个可以去查看我们想要查看的进程。

这里主要介绍两种查看方式。

1.3.1 查看进程方式一

通过指令进行查看。

指令:ps ajx


那我们要是想要查看我们想看的进程该怎么做呢?
这里我们先写一个死循环的代码。

然后让其跑起来,这里要是只想看我们运行代码的进程,可以加个过滤指令:

ps ajx | grep mybin 

然后再将我们的标签头部也给加上:

ps ajx | head -1 && ps ajx | grep mybin

然后把我们的指令跑起来,重新创建一个ssh渠道去观测。

       可以很清楚的看到我们的mybin程序的PID是19387,那为什么还有一个带mybin的进程呢,那是因为我们再查询的时候,grep带了mybin,他也是一个进程所以一起展示出来了。那在当我们停止程序时,再查询,还能不能看到我们的mybin进程呢。

很明显没有了。

1.3.2 查看进程的方式二

我们通过刚刚那种方式来查看进程的PID太不方便了,那我们能不能让程序自己显示其PID呢?
答案是可以的,我们可以通过unistd库中的一个函数进行查看。

getpid() 

我们可以通过man指令看一下这个函数。

话不多说,就让我们来使用一下这个函数吧,修改一下刚刚的代码。

我们同时开一个窗口用指令来看看ID是否一致。

很明显,两边的id是一致的。

那我们开始正式的介绍第二种查看进程的方式。
       在Linux中有一个动态文件夹叫/proc,这里面会动态地存储进程的信息,我们可以用指令去查看里头的信息。

ls /proc


在 ls /proc 后加上具体的PID值就可以详细的去查看我们进程的信息了。 

1.4 父进程与子进程

       在刚刚的演示当中,我们可以看到PID的左边还有一个叫PPID的值,这个值代表parent PID
即该进程的父进程的PID。
       在unistd.h这个库中也有能查看父进程PID的函数:

查看父进程的PID:getppid()

这里修改代码,给大家演示一下。

试验如下:

通过我们几次的试验,你会发现,我们的PID一直在变化,而我们父进程的PID却没有变化,
这是为什么呢?

       这是因为在我们Linux中,父进程一般是我们的命令行解释器即我们的bash,其PID是不会变化的。

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

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

相关文章

Linux学习笔记8---官方 SDK 移植实验

在上一章中,我们参考 ST 官方给 STM32 编写的 stm32f10x.h 来自行编写 I.MX6U 的寄存器定义文件。自己编写这些寄存器定义不仅费时费力,没有任何意义,而且很容易写错,幸好NXP 官方为 I.MX6ULL 编写了 SDK 包,在 SDK 包…

基于springboot+vue+Mysql的校园闲置物品租售系统

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

C++小程序:同一路由器下两台计算机间简单通信(2/2)——客户端

客户端的程序结构前半部分与服务器端基本相同,后半部分也相对简单。相关函数的解释可以参考前文服务器端的内容。有关客户端的内容除个别地方外,就不再做长篇大论的解释。强调一点,如果将此程序移到其它电脑上运行,编译需要releas…

Linux网络编程】传输层中的TCP和UDP(UDP篇)

【Linux网络编程】传输层中的TCP和UDP(UDP篇) 目录 【Linux网络编程】传输层中的TCP和UDP(UDP篇)传输层再谈端口端口号范围划分认识知名端口号netstatiostatpidofxargs UDP协议UDP协议端格式UDP的特点面向数据报UDP的缓冲数据UDP使…

20-LINUX--网络编程

一. 主机字节序列和网络字节序列 主机字节序列分为大端字节序和小端字节序,不同的主机采用的字节序列可能不同。大 端字节序是指一个整数的高位字节存储在内存的低地址处,低位字节存储在内存的高地址 处。小端字节序则是指整数的高位字节存储在内存的高…

CentOS 8.5 安装配置 Tinyproxy 轻量代理服务器 Windows10 系统设置http代理 详细教程

1 下载 下载地址 2 上传服务器并解压 tar zxvf tinyproxy-1.11.2.tar.gz 3 安装配置 #安装依赖软件 yum install automake cd tinyproxy-1.11.2/ #生成configure ./autogen.sh # ./configure --prefix/usr/local/tinyproxy make make install 4 配置环境 vim /etc/prof…

四川汇昌联信:拼多多运营属于什么行业?

拼多多运营属于什么行业?这个问题看似简单,实则涉及到了电商行业的深层次理解。拼多多运营,顾名思义,就是在拼多多这个电商平台上进行商品销售、推广、客户服务等一系列活动。那么,这个行业具体包含哪些内容呢?下面就从四个不同…

【计算机毕业设计】用于日语词汇学习的微信小程SSM

日语词汇学习小程序是高校人才培养计划的重要 组成部分,是实现人才培养目标、培养学生科研能力与创新思维、检验学生综合素质与实践能力的重要手段与综合性实践教学环节。本学生所在学院多采用半手工管理日语词汇学习小程序的方式,所以有必要开发日语词汇…

深度学习--DCGAN

代码之后的注释和GAN的一样,大家如果已经掌握GAN,可以忽略掉哦!!! 在学习DCGAN之前,我们要先掌握GAN,深度学习--生成对抗网络GAN-CSDN博客 这篇博客讲的就是GAN的相关知识,还是很详…

吃掉 N 个橘子的最少天数

代码实现: 方法一:递归——超时 #define min(a, b) ((a) > (b) ? (b) : (a))int minDays(int n) {if (n 1 || n 2) {return n;}if (n % 3 0) {if (n % 2 0) {return min(min(minDays(n - 1), minDays(n / 2)), minDays(n - 2 * (n / 3))) 1;} e…

引擎:主程渲染

一、引擎发展 二、引擎使用 1.游戏渲染流程 2.3D场景编辑器操作与快捷键 3.节点的脚本组件 脚本介绍 引擎执行流程 物体节点、声音组件\物理组件\UI组件、脚本组件 暴露变量到面板 4.节点的查找 基本查找 this.node:挂载当前脚本的节点A; this.nod…

echarts环形图 legend文字过长显示...鼠标移动上展示全称

legend: {type: scroll,orient: vertical,x: left,y: bottom,top: "42%",left: 13%,data: this.dutyNames,textStyle: { color: #fff },triggerEvent: true,tooltip: {show: true,trigger: item,//鼠标移动上去展示全称},formatter: function (params) {var val &qu…

【每日刷题】Day38

【每日刷题】Day38 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 2696. 删除子串后的字符串最小长度 - 力扣(LeetCode) 2. LCR 123. 图书整理…

使用 Spring Boot 配合策略模式增强系统接口扩展能力

使用 Spring Boot 配合策略模式增强系统接口扩展能力 在软件开发中,系统的可扩展性是一个至关重要的方面。而策略模式是一种常见的设计模式,它可以帮助我们实现灵活的算法选择和系统功能扩展。结合 Spring Boot 框架,我们可以更加方便地利用策…

域控操作十四:统一修改域控内计算机用户头像

1,Windows默认头像存储路径,所以我们把这里面的图片都改成自己想要的头像,然后写策略强制使用默认头像就行了 此设置是替换默认头像使用 此设置是为设置默认头像

039——解决室内不能使用GPS问题

目录 引入 GUI整改 client添加GPS分析 完善服务器网络通讯部分代码 添加GPS的BSW层 GPS操作部分代码(相当于驱动) 效果展示 项目管理操作 引入 最近在写论文加上出去玩了一圈所以停更了一段时间。上次咱们GPS有个室内用不了的问题,咱…

本地vite启动的vue项目使用nginx代理

前提: 必须在同一网段或者相同的局域网!!! nginx下载通道: https://nginx.org/en/download.html 步骤: 1、最好下载稳定版本: 2、下载后直接解压(注意:解压后不要放…

C++入门系列-拷贝构造函数

🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” 拷贝构造函数 概念 在创建对象的时候,能不能创建一个和已知已存在的对象一模一样的对象呢? 拷贝构造函数:只有单个形参,该形参…

【JavaWeb】Day74.Spring——AOP进阶(连接点)

连接点 连接点可以简单理解为可以被AOP控制的方法。我们目标对象当中所有的方法不是都是可以被AOP控制的方法。而在SpringAOP当中,连接点又特指方法的执行。 在Spring中用JoinPoint抽象了连接点,用它可以获得方法执行时的相关信息,如目标类名…

Mybatis操作数据库的两种方式:原生API

mybatis操作数据的两种方式:原生api和mapper代理对象 1.mybatis的api提供的方法 insert() 增加 delete() 删除 update() 更新 selectOne() 返回一个数据 selectList() 返回多个数据,结果类型为List selectMap() 返回多个数据&…