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也被修改成了我们设置的目录 

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

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

相关文章

【用法总结】无障碍AccessibilityService

一、背景 本文仅用于做学习总结,转换成自己的理解,方便需要时快速查阅,深入研究可以去官网了解更多:官网链接点这里 之前对接AI语音功能时,发现有些按钮(或文本)在我没有主动注册唤醒词场景…

原生js实现拖拽效果

<!DOCTYPE html> <html> <head> <style> #mydiv { width: 200px; height: 200px; background-color: red; position: absolute; cursor: move; } </style> | </head> <body> <div id"mydiv">拖拽我…

PostgreSQL认证考试PGCA、PGCE、PGCM

PostgreSQL认证考试PGCA、PGCE、PGCM 【重点&#xff01;重点&#xff01;重点&#xff01;】PGCA、PGCE、PGCM 直通车快速下正&#xff0c;省心省力&#xff0c;每2个月一次考试 PGCE考试通知 &#xff08;2024&#xff09; 一、考试概览 &#xff08;一&#xff09; 报名要…

k8s存储卷之动态

动态pv需要两个组件 1、卷插件&#xff0c;k8s本身支持的动态pv创建不包含NFS&#xff0c;需要声明和安装一个外部插件 Provisioner 存储分配器&#xff0c;动态创建pv&#xff0c;然后根据pvc的请求自动绑定和使用 2、StorageClass&#xff0c;用来定义pv的属性&#xff0c…

unity小程序websocket:nginx配置https (wss)转http (ws)及其他问题解决

目录 前言 实际运用场景 处理流程如下 nginx配置ssl和wss 配置过程中遇到的问题 1、无法连接服务器 2、通过IP可以访问&#xff0c;域名却不行 问题描述 解决 3、如何判断该域名是否备案了 前言 为了服务器网络的通用性&#xff0c;我们在实现移动端的游戏转微信小程序…

网络地图服务(WMS)详解

文章目录 1.概述2.GetCapabilities3.GetMap4.GetFeatureInfo 阅读本文之前可参考前文&#xff1a;《地图服务器GeoServer的安装与配置》与《GeoServer发布地图服务&#xff08;WMS、WFS&#xff09;》。 1.概述 经过前文的介绍&#xff0c;相信我们对WMS/WFS服务已经有了一个非…

vue3.2引用unplugin-vue-components插入,解放开发中import组件

目录 前言引用unplugin-vue-components插件的优缺点优点缺点 unplugin-vue-components插件引入安装插件配置vite配置更新TypeScript配置使用代码位置 总结Q&A 前言 unplugin-vue-components是一个用于Vue.js项目的插件&#xff0c;特别适用于Vite和Webpack构建工具。它的主…

PHP反序列化总结4--原生类总结

原生类的简要介绍以及原生类和反序列化的关系 PHP 原生类指的是 PHP 内置的类&#xff0c;它们可以直接在 PHP 代码中使用且无需安装或导入任何库&#xff0c;相当于代码中的内置方法例如echo &#xff0c;print等等可以直接调用&#xff0c;但是原生类就是可以就直接php中直接…

ES API 批量操作 Bulk API

bulk 是 elasticsearch 提供的一种批量增删改的操作API。 bulk 对 JSON串 有着严格的要求。每个JSON串 不能换行 &#xff0c;只能放在同一行&#xff0c;同时&#xff0c; 相邻的JSON串之间必须要有换行 &#xff08;Linux下是\n&#xff1b;Window下是\r\n&#xff09;。bul…

常见的加密算法

加密算法 AES 高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥&#xff0c;具体的加密流程如下图&#xff1a; RSA RSA 加密算法是一种典型的非对称加密算法&am…

阴盘奇门八字排盘马星位置计算方法php代码

如下位置&#xff0c;马星的四个位置。 计算方法&#xff1a; 1。先根据出生年月日&#xff0c;计算得八字四柱。比如 2024年01月09日&#xff0c;四柱为 其中时柱地支为“申” 2。然后根据以下对应的数组&#xff0c;来找到id号&#xff0c;即马星位置。 根据下表来找到&am…

JS实现网页轮播图

轮播图也称为焦点图&#xff0c;是网页中比较常见的网页特效。 1、页面基本结构&#xff1a; 大盒子focus&#xff0c;里面包含 左右按钮ul 包含很多个li &#xff08;每个li里面包含了图片&#xff09;下面有很多个小圆圈 因为我们想要点击按钮&#xff0c;轮播图左右播放&a…

springboot——消息中间件

消息的概念 从广义角度来说&#xff0c;消息其实就是信息&#xff0c;但是和信息又有所不同。信息通常被定义为一组数据&#xff0c;而消息除了具有数据的特征之外&#xff0c;还有消息的来源与接收的概念。通常发送消息的一方称为消息的生产者&#xff0c;接收消息的一方称为…

智能路由器中的 dns.he.net可使用自定义域名的免费 DDNS 服务配置方法

今天介绍的这个是可以使用自定义域名同时支持使用二级域名的免费DDNS服务 dns.he.net的动态DDNS服务的配置方法, 这个服务相对还是比较稳定的, 其配置也和其他的DDNS服务有些不太一样, 首先他的主机名: 这里需要设置为登录后分配的区域域名: ipv6.he.net 然后就是 DDNS 用户…

docker 安装elasticsearch、kibana、cerebro、logstash

安装步骤 第一步安装 docker 第二步 拉取elasticsearch、kibana、cerebro、logstash 镜像 docker pull docker.elastic.co/elasticsearch/elasticsearch:7.10.2 docker pull docker.elastic.co/kibana/kibana:7.10.2 docker pull lmenezes/cerebro:latest docker pull l…

Android基于Matrix绘制PaintDrawable设置BitmapShader,以手指触点为中心显示原图像圆图,Kotlin(3)

Android基于Matrix绘制PaintDrawable设置BitmapShader&#xff0c;以手指触点为中心显示原图像圆图&#xff0c;Kotlin&#xff08;3&#xff09; 在 Android基于Matrix绘制PaintDrawable设置BitmapShader&#xff0c;以手指触点为中心显示原图像圆图&#xff0c;Kotlin&#…

大括号内两行公式中,如何左对齐公式的条件

1. 先建立一个大括号&#xff0c;中间设置一个二维矩阵如下&#xff1a; 2. 选中整个矩阵&#xff0c;不要选外面的括号&#xff0c;进行如下操作 3. 选择左侧对齐 即可。

用LM Studio:2分钟在本地免费部署大语言模型,替代ChatGPT

你想在本地使用类似ChatGPT 的大语言模型么&#xff1f;LM Studio 可以帮你2分钟实现ChatGPT的功能&#xff0c;而且可以切换很多不同类型的大语言模型&#xff0c;同时支持在Windows和MAC上的PC端部署。 LM Studio是一款面向开发者的友好工具&#xff0c;特别适合那些想要探索…

华为 HarmonyOS 页面跳转

HarmonyOS 页面跳转 1.新建页面2.添加跳转方法3.实现跳转效果 1.新建页面 我们新建2个页面(page)&#xff0c;一个Hello World页面&#xff0c;一个Hello HarmonyOS页面&#xff0c;注意修改红色框内容&#xff0c;保持一致 2.添加跳转方法 导入导入router模块&#xff0c;页…

第二十八周:文献阅读笔记(弱监督学习)+ pytorch学习

第二十八周&#xff1a;文献阅读笔记&#xff08;弱监督学习&#xff09; 摘要Abstract1. 弱监督学习1.1. 文献摘要1.2. 引言1.3. 不完全监督1.3.1. 主动学习与半监督学习1.3.2. 通过人工干预1.3.3. 无需人工干预 1.4. 不确切的监督1.5. 不准确的监督1.6. 弱监督学习的创新点 2…