Linux------进程的初步了解

目录

一、什么是进程

二、进程的标识符pid

三、getpid 得到进程的PID

四、kill 终止进程

五、父进程与子进程

六、目录中的进程


一、什么是进程

在windows中,我们查看进程很简单,打开任务管理器,就可以看到在运行的进程。这里我们还可以看到CPU要对进程进行处理,并且进程已经加载到了内存里

那么什么是进程呢? 

课本概念:程序的一个执行实例,正在执行的程序等。

内核观点:担当分配系统资源(CPU时间,内存)的实体。

在操作系统内部存在很多进程,操作系统要对进程进行管理,就得先描述,在组织。具体为什么参考这篇文章冯诺依曼与操作系统。使用结构体将进程描述起来,再使用数据结构将他们组织连接起来,这样我们对进程的管理就转化为对数据结构的增删查改了

该结构体我们称之为进程的PCB(process control block)Linux操作系统下的PCB是: task_struct,他的结构体简略描述如下

struct task_struct
{
    //进程id
    //指向可执行程序的指针
    //等等属性
    struct task_struct*next
    //其他指针
}

比如在存放在磁盘上的各种可执行程序,运行时就会被加载到内存中,这时操作系统(第一个被加载到内存的软件)会帮助我们创建进程的PCB,并将PCB链接起来形成进程链表,后续操作系统对进程的管理就转变成了对进程链表的增删查改。

进程不仅仅只有进程链表这一个结构,同一个进程还有可能在其他的结构中,如进程的运行队列,会根据进程的优先级进行排队,等待CPU处理。

现在我们可以给进程下一个定义:进程 = 可执行程序 + 内核数据结构。这里的内核数据结构包括了PCB,这可以方便操作系统对进程进行管理。

二、进程的标识符pid

Linux中,输入指令ps ajx 可以查看当前所有进程

ps ajx

其中进程的的标识符被称作pid

同时我们也可以编写一个程序,执行起来,看看这个进程的情况。

随便写个打印的死循环,同时睡眠一下方便观看。

Makefile也写上。 

make 编译并执行

使用 ps ajx | head -1 取出第一行,同时通过 ps ajx | grep mycode 过滤出 mycode文件,这样就方便查看mycode进程的信息了,这里我们看到mycode进程的PID为1251。

 我们ctrl + c 将进程终止后,再去查询,就发现可执行程序 mycode被终止掉了。

再运行以下,发现又可以查到,并且PID发生了变化。

现在我们可以得出一个结论:我们运行的所有指令,软件,自己写的程序,最终都是进程

三、getpid 得到进程的PID

在冯诺依曼与操作系统中,我们讲到通过库函数可以去调用系统接口,这里我们学习第一个接口getpid。他可以获取该进程的id,返回参数为pid_t(本质是无符号整数)。

如下,包一下getpid的头文件sys/types.h,就可以开始使用getpid了。

编辑好wq保存并退出,make后再执行一下。 

四、kill 终止进程

输入指令 kill -9 + 进程PID  可以终止进程

-9这里为9号信号,这里记住就行。

五、父进程与子进程

其实,我们之前所写的可执行程序还有父进程。

这里我们观察到当前进程PID左边还有个PPID,这个PPID代表当前进程的父进程。

我们还发现当我们终止进程后重新启动该进程,进程的PID会发生变化,而PPID没有变。 如下图PPID都是5350。

Linux启动进程一般都是通过父进程创建的,那么这个父进程是谁呢? 这里我们看到该进程就是bash。当我们在命令行当中启动进程的时候,这些进程的父进程都是bash(命令行解释器)

我们有gitpid这个接口函数可以获取进程的pid,同时也有gitppid这个接口函数来获取进程ppid。我们将mycode.c做如下修改。

这里就可以打印出PPID了。 

六、目录中的进程

Linux还有种方式可以查看进程,就是通过目录查看。输入命令 ls /proc/  打开proc目录,这里面存放着所有的进程,目录的名称就是以这个进程的id命名的

如图,我们运行mycode程序,8040进程存在 ,终止进程,8040就不存在了。

在目录中,该进程的内容很多,我们大可不必全都了解,了解重要的部分就行,如了解cwd与exe这两个文件就行了。

exe代表着该进程能找到自己的可执行程序,如果可执行程序被删除也能发现。

cwd 代表当前工作目录,比如在我们使用fopen函数进行文件写入的时候,如果不使用绝对路径,就会写入到cwd中默认情况下,进程启动所处的路径就是当前路径。如下修改代码

 这样就写入到了当前工作目录下

如果我们使用 chdir("路径")  修改当前工作目录。 那么写入的地方就会变成你修改的路径。

写入到了 /home/kky/109 

同时cwd也被修改成了我们设置的目录 

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

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

相关文章

红队专题-反序列化攻击-Tools-Ysoserial

Ysoserial 招募六边形战士队员ysoserial-0.0.6-SNAPSHOT-all.jarysoserial的原生CB1的链CC6链在ysoserial编写自己的payload ysoserial.net前言 参考文章 招募六边形战士队员 一起学习 代码审计、安全开发、web攻防、逆向等。。。 私信联系 ysoserial-0.0.6-SNAPSHOT-all.ja…

POI-tl 知识整理:整理2 -> 标签

1 文本标签 {{var}} 数据模型: String :文本 TextRenderData :有样式的文本 HyperlinkTextRenderData :超链接和锚点文本 Object :调用 toString() 方法转化为文本 代码示例: Testpublic void testText…

Brc20钱包横评推荐:谁更适合玩铭文?

加密货币的世界越来越热闹,新的创意层出不穷!最近,BRC-20 通证标准成了这个圈子的新宠儿,这是在比特币网络上诞生的一种超酷的新型可替代通证。和以太坊的 ERC-20 通证一样牛,但 BRC-20 通证是 Ordinals 协议的杰作&am…

spring boot application yaml key下划线如何转java的Properties对象字段驼峰

spring boot yaml key和value如何映射到Properties对象 下面以MybatisPlusProperties为例 ##java properties 字段驼峰 ##yaml文件如图,key使用下划线 ##java对象驼峰转下划线匹配yaml文件key DataObjectPropertyName.toDashedForm(name);//驼峰转下划线 ##设置P…

ES自动补全

安装IK分词器 要实现根据字母做补全,就必须对文档按照拼音分词。在GitHub上恰好有elasticsearch的拼音分词插件。地址:GitHub - medcl/elasticsearch-analysis-pinyin: This Pinyin Analysis plugin is used to do conversion between Chinese characte…

【神经网络算子】

神经网络算子(1)——DeepONet介绍 AI与PDE(三):大概是最好懂的DeepONet模型解析 算子把函数映射为函数。 输入函数u,在固定的sensors上:x_1,x_2,…,x_m。即u(x_i)和y。 输出函数G(u),在随机的y上。即G(u)(…

HUAWEI华为MateStation S台式机电脑12代PUC-H7621N,H5621N原装出厂Windows11.22H2系统

链接:https://pan.baidu.com/s/1QtjLyGTwMZgYiBO5bUVPYg?pwd8mx0 提取码:8mx0 原厂WIN11系统自带所有驱动、出厂主题壁纸、系统属性专属联机支持标志、Office办公软件、华为电脑管家等预装程序 文件格式:esd/wim/swm 安装方式&#xf…

大模型实战05——LMDeploy大模型量化部署实践

大模型实战05——LMDeploy大模型量化部署实践 1、大模型部署背景 2、LMDeploy简介 3、动手实践环节——安装、部署、量化 注 笔记内容均为截图 笔记课程视频地址:https://www.bilibili.com/video/BV1iW4y1A77P/?spm_id_from333.788&vd_source2882acf8c823ce…

Costco攻入山姆大本营

01 Costco深圳店开业火爆 “我今天不去Costco,早上还没开业,路上就已经堵车了,看来今天人很多,过几天再去”,原本计划在Costco开业当天去逛逛的张芸(化名)无奈只能放弃。 家住在Costco深圳店旁…

基于Java SSM框架实现医院管理系统项目【项目源码】计算机毕业设计

基于java的SSM框架实现医院管理系统演示 SSM框架 当今流行的“SSM组合框架”是Spring SpringMVC MyBatis的缩写,受到很多的追捧,“组合SSM框架”是强强联手、各司其职、协调互补的团队精神。web项目的框架,通常更简单的数据源。Spring属于…

【算法】了解哈希表/思想 并用哈希解算法题(C++)

文章目录 基本了解解题1.两数之和面试题01.02.判定是否互为字符重排217.存在重复元素219.存在重复元素II49.字母异位词分组 基本了解 哈希表是什么? 一种数据结构,用于存储元素。 有什么用? 用于快速查找元素 与 插入 何时用哈希表&…

最大公约数和最小公倍数

1. 最大公约数 给定两个整数,求这两个数的最大公约数 暴力求解: 从较小的那个数开始,依次递减,直到某个数能够同时被整除 //暴力求解 int main() {int a 0;int b 0;scanf("%d %d", &a, &b);int i 0;int min …

Matlab深度学习进行波形分割(二)

🔗 运行环境:Matlab 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥 推荐专栏:《算法研究》 🔐#### 防伪水印——左手の明天 ####🔐 💗 大家…

三、ngxin虚拟主机

目录 什么是nginx虚拟主机修改端口 访问页面1、配置nginx.config 文件2、 添加配置给目录中写入内容检测nginx 是否有语法错误(nginx -t)重启 nginx查看配置结果 不同主机网卡 查看到不同的页面先添加一个临时ip修改ngixn配置文件创建目录文件检测nginx …

聊聊websocket那些事

前端必备工具推荐网站(免费图床、API和ChatAI等实用工具): http://luckycola.com.cn/ 一、什么是websocket? WebSocket 是一种在单个 TCP 连接上进行全双工通信的网络协议。 它是 HTML5 中的一种新特性,能够实现 Web 应用程序和服务器之间的实时通信,…

C++PythonC# 三语言OpenCV从零开发(1):环境配置

文章目录 前言课程选择环境配置PythonC#COpenCV官网下载新建C项目测试运行Csharp版Python版 gitee仓库总结 前言 由于老王我想转机器视觉方向的上位机行业,我就打算开始从零学OpenCV。但是目前OpenCV有两个官方语言,C和Pyhont。C# 有大佬做了对应的Open…

数据结构——顺序二叉树——堆

1.树的相关概念 在介绍二叉树之前,我们首先要明确树是什么。 树用我们的通常认识来判断应该是一种植物,从根向上生长,分出许多的树枝并长出叶子。对于数据结构中的树而言,其结构也正是从树的特征中剥离出来的。树结构是一种非线性…

8 - MySQL数据读写分离|MySQL多实例

MySQL数据读写分离|MySQL多实例 MySQL数据读写分离数据读写分离如何实现数据的读写分离提供数据读写分离服务的软件(中间件)maxscale 软件提供的读写分离服务的工作过程配置数据读写分离结构 提供数据存储服务 MySQL多实例 MySQL数据读写分离…

[NAND Flash 6.4] NAND FLASH基本读操作及原理_NAND FLASH Read Operation源码实现

依公知及经验整理,原创保护,禁止转载。 专栏 《深入理解NAND Flash》 <<<< 返回总目录 <<<< ​全文 6000 字 内容摘要 NAND Flash 引脚功能 读操作步骤 NAND Flash中的特殊硬件结构 NAND Flash 读写时的数据流向 Read 操作时序 读时序操作过…

求斐波那契数列矩阵乘法的方法

斐波那契数列 先来简单介绍一下斐波那契数列&#xff1a; 斐波那契数列是指这样一个数列&#xff1a;1&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;5&#xff0c;8&#xff0c;13&#xff0c;21&#xff0c;34&#xff0c;55&#xff0c;89……这个数列从第3项开始 &…