【Linux系统化学习】探索进程的奥秘 | 第一个系统调用

=========================================================================

个人主页点击直达:小白不是程序媛

Linux系列专栏:系统化学习Linux

=========================================================================

目录

进程的概念

进程的管理

描述进程——pcb

组织进程

进程在排队

Linux下的进程

Linux组织进程

查看进程

 查看可执行程序的进程

第一个系统调用

"杀掉进程"


进程的概念

上篇文章我们介绍了冯诺依曼体系结构和了解了操作系统的概念和功能;在我们Windows的计算机上的磁盘上有很多的可执行程序,其中有我们自己手动安装的或者自己写的可执行程序的代码等等各种功能的程序。当我们想启动某一程序时,只需要双击它的图标即可。根据冯诺依曼体系结构操作系统便将我们执行的可执行程序从磁盘加载到内存中,此时这个可执行程序在内存中就执行起来了,便是一个我们所谓的进程。

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

 

这就是我计算机此时后台进程和运行起来的程序,我们会发现后台的进程不止一个运行起来的程序也不知一个;就像我现在一边在这里写文章一边还是用音乐播放器放着我喜欢的音乐,甚至在阅读参考文档等等运行了很多我使用到的程序,互不干扰每个运行起来的可执行程序只发挥着自己的作用。


进程的管理

当我们启动计算机的那一刻,操作系统这款软件就率先运行起来;上篇文章我们详细谈到操作系统的作用:对软硬件资源进行管理和操作系统的核心之一进程管理。一个软件加载到内存中运行起来便是一个进程,操作系统的管理方式——先描述,在组织

描述进程——pcb

进程加载到内存中内存操作系统会分配空间地址(ID)(代码地址&数据地址),记录此时我们是否在使用(状态)等等各种属性,操作系统将这些能够描述一个加载在内存中的程序的属性打包起来(struct),这个struct便是一个进程的pcb(process control block)。

  • 进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。
  • 课本上称之为PCB(process control block),Linux操作系统下的PCB是: task_struct

组织进程

加载到内存中的可执行程序,操作系统会形成它的pcb,每个pcb不仅仅含有描述对应运行软件的各种属性,还有指向下一个运行起来程序的pcb(也就是结构体指针)。将每个pcb以链表的方式组织起来,其实就是对进程的管理被建模成对链表的增删查改

进程在排队

当我们运行起来的程序需要进入CPU进行数据运算时,会被CPU调度一次;当运行起来很多程序时,每个程序都有自己的pcb;将需要被CPU调度的软件的pcb以队列的形式组织起来,先进先出;这便是进程在排队;

总结:

  • 操作系统并不是直接对运行起来的可执行程序做管理,而是对运行起来的可执行程序“打包”(pcb),每个pcb做管理。
  • 进程的深层含义:进程=可执行程序+内核数据结构(pcb)
  • 进程的pcb不止在一个链表中,可能在很多结构中;例如:当程序运行起来并且需要CPU调度时pcb不仅在链表中,还在一个队列中排队。

Linux下的进程

task_struct——PCB的一种

  • 在Linux中描述进程的结构体叫做task_struct
  • task_structLinux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息

task_struct内容分类

  • 标示符: 描述本进程的唯一标示符,用来区别其他进程。(pid)
  • 状态: 任务状态,退出代码,退出信号等。
  • 优先级: 相对于其他进程的优先级。
  • 程序计数器: 程序中即将被执行的下一条指令的地址。
  • 内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
  • 上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。
  • I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
  • 记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
  • 其他信息

Linux组织进程

可以在内核源代码里找到它。所有运行在系统里的进程都以task_struct链表的形式存在内核里

查看进程

指令

  • ps ajx
  • ps指令还有很多的选项,目前我们我们就只介绍这一个选项在以后的文章中会慢慢介绍剩下的选项。 

下图为我当前Linux下的部分进程。

 查看可执行程序的进程

我们自己使用编程语言写的.c文件不是可执行程序,需要通过预处理、编译、链接生成后缀为.exe的可执行程序,运行这个可执行程序在系统中会生成进程。

#include<stdio.h>
#include<unistd.h>
int main()
{int i=0;while(i<100){printf("我是一个进程!\n");sleep(1);i++;                                                                                                                                                                       }return 0;
}

 上图我们执行可执行程序后通过管道过滤会查到我们可执行程序运行时的进程。

总结:

  • 我们执行的程序、写的可执行程序、执行的代码都是进程 

第一个系统调用

我们可以通过函数调用得到我们的pid

  1 #include<stdio.h>2 #include<unistd.h>3 #include<sys/types.h>4 int main()5 {6     int i=0;7     while(i<100)8     {9         pid_t id  =getpid();10         printf("我是一个进程,我的进程id是:%d\n",id);11         sleep(1);12         i++;13     }14     return 0;15 }   

"杀掉进程"

使用kill指令配合进程的pid就可以”杀掉进程“


今天对Linux下进程的介绍分享到这就结束了,希望大家读完后有很大的收获,也可以在评论区点评文章中的内容和分享自己的看法。您三连的支持就是我前进的动力,感谢大家的支持!!!

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

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

相关文章

租赁小程序|租赁系统一种新型的商业模式

租赁市场是一个庞大的市场&#xff0c;它由出租人和承租人组成&#xff0c;以及相关的中介机构和供应商等。随着经济的发展和人们对灵活性的需求增加&#xff0c;租赁市场也在不断发展和壮大。特别是在共享经济时代&#xff0c;租赁市场得到了进一步的推动和发展。租赁系统是一…

2023年9月 少儿编程 中国电子学会图形化编程等级考试Scratch编程一级真题解析(选择题)

2023年9月scratch编程等级考试一级真题 选择题&#xff08;共25题&#xff0c;每题2分&#xff0c;共50分&#xff09; 1、下列哪项内容是不可以修改的 A、角色名称 B、造型名称 C、背景名称 D、舞台名称 答案&#xff1a;D 考点分析&#xff1a;考查scratch相关知识&am…

03-关系和非关系型数据库对比

关系和非关系型数据库对比 关系型数据库(RDBMS)&#xff1a;MySQL、Oracl、DB2、SQLServer 非关系型数据库(NoSql)&#xff1a;Redis、Mongo DB、MemCached 插入数据结构的区别 传统关系型数据库是结构化数据,向表中插入数据时都需要严格的约束信息(如字段名,字段数据类型,字…

【装包拆包----泛型】

文章目录 装箱和拆箱泛型创建一个泛型数组泛型的上界泛型方法 装箱和拆箱 装箱&#xff1a; 把基本数据类型给到引用数据类型 public static void main(String[] args) {//自动装包//第一种装包Integer c 12;//第二种装包int a 7;Integer b a;//显示装包Integer aa Intege…

课程32:.Net Core Web API部署IIS

这里写目录标题 &#x1f680;前言前言一、服务器环境配置1.1 安装 ASP.NET Core模块/托管捆绑包1.2 检查是否安装成功 二、项目发布2.1 选择发布方式2.2 发布配置2.3 发布 三、服务器部署3.1 IIS添加网站3.2 数据库链接配置3.3 让IIS支持.NET Web Api3.4 验证 四、最后 &#…

idea中git 移除对某个文件的跟踪

应用场景如下 某个log 文件&#xff0c;被同事用git 提交到了服务器&#xff0c;本地拉去之后我们的跟踪也会受影响 取消跟踪的方法如下&#xff1a; 删除本地缓存 git rm --cached "logs/test.log" 提交无效的log git commit -m "ignore log" 再将lo…

Postman接口Mock Servier服务器

近期在复习Postman的基础知识&#xff0c;在小破站上跟着百里老师系统复习了一遍&#xff0c;也做了一些笔记&#xff0c;希望可以给大家一点点启发。 应用场景&#xff1a;后端的接口还没有开发完成&#xff0c;前端的业务需要调用后端的接口&#xff0c;可以使用mock模拟。 一…

Linux_虚拟机常用目录汇总

根目录&#xff08;cd /&#xff09;&#xff1a;/ 表示根目录&#xff0c;cd和 / 之间有个空格&#xff01; 用户目录&#xff08;cd ~&#xff09;&#xff1a;~ 表示用户目录&#xff0c;也称为家目录。cd 和 ~ 之间有个空格&#xff01; 当前路径&#xff1a;执行 pwd 指令…

微信加好友操作频繁了,怎么办?

近来&#xff0c;微信的风控是越来越严重&#xff0c;因为本身微信是作为一个社交软件&#xff0c;但流量大适合用来做私域营销。在日常使用微信中&#xff0c;我们也要了解下微信加好友的规则。 目前微信加人的规则是&#xff1a; 1、通过附近人功能加人上限15人/天&#xf…

【Linux系统编程十八】:(基础IO5)--动静态库共享/动静态加载问题(涉及地址空间)

【Linux系统编程十八】&#xff1a;动静态库共享/动静态加载问题(涉及地址空间&#xff09; 一.可执行程序如何被加载的1.加载之前2.加载之后①如何执行第一条命令②缺页中断/与地址空间建立联系 二.动态库如何加载的三.动态库如何实现多进程间共享的 一.可执行程序如何被加载的…

dewarp:数据变换

一. 效果 输入图片&#xff1a;test.jpg 前向场:test.npy 输出图片&#xff1a;dewarp_img.jpg 二. 代码 import os import cv2 import numpy as npdef align_flow(image, flow):"""flow: -1~1, 非文本区域是nanbm_flow: 对齐的bm&#xff0c;可以直接对图…

突发!奥特曼宣布暂停ChatGPT Plus新用户注册!

大新闻&#xff01;就在刚刚&#xff01; OpenAI的CEO Sam Altman宣布暂停ChatGPT Plus 新用户注册&#xff01; Sam Altman对此解释道&#xff1a; 由于OpenAI开发日后ChatGPT使用量的激增超出了我们的承受能力&#xff0c;我们希望确保每个人都有良好的体验。 您仍然可以在a…

HTML易忽略的角落【目录】

目前已有文章 **** 篇 本专栏是汇集了一些HTML常常被遗忘的知识&#xff0c;这里算是温故而知新&#xff0c;往往这些零碎的知识点&#xff0c;在你开发中能起到炸惊效果。我们每个人都没有过目不忘&#xff0c;过久不忘的本事&#xff0c;就让这一点点知识慢慢渗透你的脑海。 …

好用且强大——JNPF永远的神

一款开源且强大的工具 风流数年&#xff0c;只看今朝&#xff0c;Linux 让我们看到了开源驱动下的生产力&#xff0c;其实低代码和它一样&#xff0c;都是提高效率、降低成本的工具。 近 10 年间&#xff0c;JNPF 低代码平台如火如荼的发展起来&#xff0c;堪称黑马也不为过。这…

CNVD-2021-09650:锐捷NBR路由器(guestIsUp.php)RCE漏洞复现 [附POC]

文章目录 锐捷NBR路由器guestIsUp.php远程命令执行漏洞(CNVD-2021-09650)复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 锐捷NBR路由器guestIsUp.php远程命令执行漏洞(CNVD-2021-09650)复现 [附POC] 0x01 前言 免…

京东数据挖掘(京东运营数据分析):2023年宠物行业数据分析报告

随着社会经济的发展&#xff0c;人均收入水平逐渐提高&#xff0c;使得宠物成为越来越多家庭的成员&#xff0c;宠物数量不断增长。伴随养宠人群的增多&#xff0c;宠物相关产业的发展也不断升温&#xff0c;宠物经济规模持续增长。 根据鲸参谋平台的数据显示&#xff0c;在宠物…

由于找不到d3dx9_43.dll,无法继续执行代码,需要如何修复?

d3dx9_43.dll是一个重要的动态链接库&#xff08;DLL&#xff09;文件&#xff0c;它属于DirectX组件&#xff0c;主要负责处理游戏和多媒体应用程序中的图形和音频渲染。在本文中&#xff0c;我们将讨论四个解决方案来解决d3dx9_43.dll问题&#xff0c;以及d3dx9_43.dll的作用…

0基础学习VR全景平台篇第121篇:认识视频剪辑软件Premiere

上课&#xff01;全体起立~ 大家好&#xff0c;欢迎观看蛙色官方系列全景摄影课程&#xff01; 大家好&#xff0c;这节课是带领大家认识认识我们的剪辑软件Premiere&#xff0c;一般简称是PR。 &#xff08;PR界面&#xff09; 我们首先打开PR&#xff0c;第一步就是要创建…

npm install导致的OOM解决方案

文章目录 问题记录解决方法Linux重启排查方法 如何排查Linux自动重启的原因 问题记录 我在华为云服务器配置npm开发环境的时候&#xff0c; SSH远程连接一直掉线&#xff0c;无奈提了工单&#xff0c;被告知是NPM install导致的OOM问题。无语了&#xff0c;破NPM还有这个问题呢…

视频号视频怎么保存?教你三种方法

现在随着视频号的兴起&#xff0c;很多用户都喜欢在视频号上分享自己的生活、工作和兴趣爱好。但是很多人都遇到了一个问题&#xff0c;就是视频号上看到了喜欢的视频&#xff0c;想要保存下来&#xff0c;却不知道怎么做。今天我们就来教大家三种方法&#xff0c;让你轻松保存…