【Linux进程】 进程的理解

news2024/11/18 3:24:36

目录

前言

1. 系统管理

2. 进程

2.1 概念

2.2 进程的调度

2.3 描述进程-PBC

3. 查看进程

 4. 通过系统调用获取进程标示符


前言

      在计算机科学领域,进程是一种重要的概念,在日常学习中也经常遇到进程这个概念,那么进程到底是什么?我们又应该如何去理解,本文将为你详细解释什么是进程,以及如何在Linux环境下如何查看进程。

在这里插入图片描述

1. 系统管理

为什么要有系统管理?

  • 对下管理好硬件资源

操作系统通过对硬件资源的管理,确保了系统的稳定、高效和安全的运行环境

  • 对上提供良好的运行环境

操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用——系统调用接口

系统调用

系统调用接口:由操作系统提供,也叫系统调用函数,这些函数是用C语言编写的函数(Linux环境)

        大多数操作系统中,用户通常不允许直接访问底层硬件。用户要想调用底层硬件必须经过操作系统。

库函数

        用户在使用时,可以直接调用系统调用接口,但系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者对部分系统调用进行了适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。

小结

系统调用和库函数的关系:

系统调用由系统提供,库函数由用户层提供,它们是上下层的关系

2. 进程

了解完整个计算机体系结构之后,再来探讨什么是进程

2.1 概念

什么是进程?

在教材当中的定义:加载到内存的程序、正在运行的程序等。进程究竟是什么,我们要如何去理解进程?

        我们在使用电脑时,电脑可以同时启动多个程序(将多个.exe文件加载到内存),程序在运行之前,必须要把程序先加载到内存,系统要对加载到内存的(可执行)程序进行管理,如何管理? ——先描述,再组织

先描述,再组织

        定义一个struct结构体,结构体包含进程几乎所有的属性字段,如:状态、优先级、标识符、内存指针字段、struct xxx *next...

这些结构以链表的形式进行连接,通过对链表的增删查改就可以对进程进行管理。

        可执行程序从磁盘加载到内存当中,没有识别标识的话,计算机就无法识别每个可执行程序,为了方便管理,于是便将每个可执行程序描述起来形成一个结构体,这个结构体也叫做进程控制块(process control block)简称PCB

        计算机将每个可执行程序的PCB以链表的形式连接起来,于是就将进程的管理,转变成了对PCB增删查改。

所以什么是进程?

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

2.2 进程的调度

进程通过链表连接,这些进程又是怎么被调度运行的?

        在CPU内部可以有一个运执行队列的数据结构,通过这个队列结构来实现对进程的调度。运行时进程可以被动态的调度,其实就是将可执行程序的PCB放入到执行队列当中。

也就是说:所有对进程的控制以及操作,只和进程的PCB有关,和进程的可执行程序无关。

        PCB可以被放在任何数据结构当中,日常中的数据结构增删查改及练习,其实也就是对进程的管理方法。

2.3 描述进程-PBC

task_struct-PCB的一种

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

task_ struct内容分类

  • 标示符: 描述本进程的唯一标示符,用来区别其他进程。

  • 状态: 任务状态,退出代码,退出信号等。

  • 优先级: 相对于其他进程的优先级。

  • 程序计数器: 程序中即将被执行的下一条指令的地址。

  • 内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针

  • 上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。

  • I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。

  • 记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。

  • 其他信息

         这些task_ struct中的数据全部都属于操作系统内部的数据。要获取这些数据(如pid),必须要调用系统调用。

3. 查看进程

了解完进程,我们在Linux环境下查看一下进程:

ps ajx

验证一下上边的结论:

我们可以在Linux环境下执行以下代码:

#include <stdio.h> 
#include <unistd.h> 
int main()
{ 
    while(1)
    { 
        printf("Hello world!\n");
        sleep(1); 
    } 
return 0;
 }

将代码编译执行:

此时程序就变成了进程,我们可以使用grep筛选查看:

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

为什么有两个?

我们在筛查时,使用了grep指令,它也是一个程序,在执行搜索myprocess时它也是一个进程,所以第二个是grep的进程。

所以,只要程序一旦被运行运行就会产生进程

使用while循环每隔1秒筛查一次myprocess进程,注意观察筛查变化:

 指令:

 while :; do ps ajx | head -1 && ps ajx | grep myprocess | grep -v grep; sleep 1; done

 可以根据生成的可执行程序名称进行适当修改。

 可以清晰的看到一个进程的产生与结束。

 4. 通过系统调用获取进程标示符

  • 进程id(PID)
  • 父进程id(PPID)

 在Linux中,一般普通进程都要它的父进程

 在Linux环境下执行下面这个程序:

#include <stdio.h>
#include <unistd.h>
#include<sys/types.h>
 int main()
   {
         pid_t id = getpid();
         pid_t fid = getppid();
         while(1)
         {
             printf("Hello world! pid: %d ppid: %d\n",id,fid);                                                  
             sleep(1);
         }
  
         return 0;
  
  }

 我们还是使用老方法,使用while循环每隔1秒筛查一次myprocess进程,注意观察筛查变化:

通过观察可以发现,每次启动时进程的id(pid)都不一样,这是因为:

每次启动的进程,都是一个新的进程

 虽然pid每次都会变,但是父进程(ppid)没有变化,那这个父进程(ppid)到底是什么?

 筛查指令:

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

我的ppid是4599,可根据自己的ppid进行修改。

 筛查结果是bash,bash是我们的命令行解释器

 所以所有在命令行启动的进程,都是bash的子进程


 总结

         通过深入了解进程的概念和原理,我们可以更好地理解计算机系统的运行方式,以上就是本文全部内容,希望对你有所帮助,感谢阅读!

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

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

相关文章

解决:ModuleNotFoundError: No module named ‘zhon’

解决&#xff1a;ModuleNotFoundError: No module named ‘zhon’ 文章目录 解决&#xff1a;ModuleNotFoundError: No module named zhon背景报错问题报错翻译报错位置代码报错原因解决方法方法一&#xff0c;直接安装方法二&#xff0c;手动下载安装方法三&#xff0c;编译安…

Spring学习 Spring概述

1.1.Spring介绍 ​ Spring是轻量级Java EE应用开源框架&#xff08;官网&#xff1a; http://spring.io/ &#xff09;&#xff0c;它由Rod Johnson创为了解决企业级编程开发的复杂性而创建 1.2.简化应用开发体现在哪些方面&#xff1f; IOC 解决传统Web开发中硬编码所造成的…

深入理解经典红黑树 | 京东物流技术团队

本篇我们讲红黑树的经典实现&#xff0c;Java中对红黑树的实现便采用的是经典红黑树。前一篇文章我们介绍过左倾红黑树&#xff0c;它相对来说比较简单&#xff0c;需要大家看完上篇再来看这一篇&#xff0c;因为旋转等基础知识不会再本篇文章中赘述。本篇的大部分内容参考 《算…

安全测试之SSRF请求伪造

前言 SSRF漏洞是一种在未能获取服务器权限时&#xff0c;利用服务器漏洞&#xff0c;由攻击者构造请求&#xff0c;服务器端发起请求的安全漏洞&#xff0c;攻击者可以利用该漏洞诱使服务器端应用程序向攻击者选择的任意域发出HTTP请求。 很多Web应用都提供了从其他的服务器上…

软件测试——自动化测试框架有哪些?

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;软件测试面试题分享&#xff1a; 1000道软件测试面试题及答案&#x1f4e2;软件测试实战项目分享&#xff1a; 纯接口项目-完…

2024年某书最新x-s-common签名算法分析以及点赞api接口测试nodejs(2024-01-05)

2024年某书又更新了x-s-common算法&#xff0c;现在的版本是&#xff1a;3.6.8。这个签名算法现在是越来越重要了&#xff0c;许多接口都要用到。比如&#xff1a;评论&#xff0c;点赞等接口&#xff0c;没有这个算法采集不到数据。 一、chrome逆向x-s-common算法 1、x-s-comm…

ReactNative 常见问题及处理办法(加固混淆)

目录 文章目录 摘要 引言 正文 ScrollView内无法滑动 RN热更新中的文件引用问题 RN中获取高度的技巧 RN强制横屏UI适配问题 低版本RN&#xff08;0.63以下&#xff09;适配iOS14图片无法显示问题 RN清理缓存 RN navigation参数取值 pod install 或者npm install 44…

JavaWeb基础(3)-会话技术(cookie和session),过滤器(Filter),监听器(Listener)

JavaWeb基础&#xff08;3&#xff09;-会话技术(cookie和session)&#xff0c;过滤器(Filter)&#xff0c;监听器(Listener) 文章目录 JavaWeb基础&#xff08;3&#xff09;-会话技术(cookie和session)&#xff0c;过滤器(Filter)&#xff0c;监听器(Listener)8 会话技术(Coo…

ChatGPT怎么帮我上班的

1.解放生产力 1&#xff09;标准格式&#xff0c;完美输出。GPT对于公文等具有一定标准格式的文件&#xff0c;可以进行完美仿写&#xff0c;随随便便以假乱真那都是小菜一碟&#xff0c;这对于经常要开展规范成文的人来说&#xff0c;简直就是个福音&#xff0c;只要前期调教…

[蓝桥杯学习]树的直径与重心

树的直径 定义 为什么不直接说&#xff08;u,v&#xff09;是两个叶子&#xff0c;可能有如下情况&#xff1a; 这是一条链&#xff0c;且u为根&#xff0c;但&#xff0c;度数为1 下面这个情况是不经过根的。 求解方法 如果设根u的深度为0时&#xff0c;直径就是深度dep[v]…

【LeetCode】608. 树节点

表&#xff1a;Tree ------------------- | Column Name | Type | ------------------- | id | int | | p_id | int | ------------------- id 是该表中具有唯一值的列。 该表的每行包含树中节点的 id 及其父节点的 id 信息。 给定的结构总是一个有效的树。…

软件测试|弄懂GROUP BY看这一篇文章就够了

简介 在SQL&#xff08;结构化查询语言&#xff09;中&#xff0c;GROUP BY子句是一个强大的工具&#xff0c;用于对查询结果进行分组和聚合操作。通过使用GROUP BY子句&#xff0c;可以根据指定的列或表达式对数据进行分组&#xff0c;并对每个分组应用聚合函数&#xff0c;从…

光明源@智慧厕所技术:优化生活,提升卫生舒适度

在当今数字科技飞速发展的时代&#xff0c;我们的日常生活正在经历一场革命&#xff0c;而这场革命的其中一个前沿领域就是智慧厕所技术。这项技术不仅仅是对传统卫生间的一次升级&#xff0c;更是对我们生活品质的全方位提升。从智能感应到数据分析&#xff0c;从环保设计到舒…

全程云OA ajax.ashx SQL注入漏洞复现

0x01 产品简介 全程云OA为企业提供日常办公管理、公文管理、工作请示、汇报、档案、知识体系、预算控制等26个功能,超过100多个子模块。为企业内部提供高效、畅通的信息渠道,同时也能大力推动公司信息系统发展,提高企业的办公自动化程度和综合管理水平,加快企业信息的流通…

软考 软件设计师 查漏补缺

说明建模图 1-1 和图 1-2 是如何保持数据流图平衡。 答&#xff1a;图 1-1 &#xff08;或父图&#xff09;中某加工的输入输出数据流必须与图 1-2 &#xff08;或子图&#xff09;的输入输出数据流在数量和名 字上相同&#xff1b;图 1-1 &#xff08;或父图&#xff09;中的…

73.乐理基础-打拍子-还原号、临时变音记号在简谱中的规则

上一个内容&#xff1a;72.乐理基础-打拍子-加延音线的节奏型-CSDN博客 下图中1-13&#xff0c;就是四几拍中所有可能出现的节奏型&#xff0c;以及它们的组合方式&#xff0c;需要练习&#xff0c;可以买一本视唱书去练习&#xff0c;搜乐谱练习&#xff0c;自己写节奏型根据…

bat批处理文件_输出内容到文本

文章目录 1、echo str > test.txt&#xff08;覆盖原有内容&#xff09;2、echo str >> test.txt&#xff08;不覆盖原有内容&#xff0c;追加&#xff09; 1、echo str > test.txt&#xff08;覆盖原有内容&#xff09; 2、echo str >> test.txt&#xff0…

CMake是什么?为什么学习CMake

&#x1f608;「CSDN主页」&#xff1a;传送门 &#x1f608;「Bilibil首页」&#xff1a;传送门 &#x1f608;「本文的内容」&#xff1a;CMake入门教程 &#x1f608;「动动你的小手」&#xff1a;点赞&#x1f44d;收藏⭐️评论&#x1f4dd; 文章目录 1.CMake简介2.为什么…

gz-hamonic 安装提示缺少许多依赖无法安装

在软件更新源中增加gz-hamonic的软件源&#xff0c; 点击添加&#xff0c;在输入框中填入如下语句&#xff1a; deb http://packages.osrfoundation.org/ubuntu jammy main 如图所示&#xff1a; 然后执行 sudo apt -get install gz-hamonic即可安装。 如下图 在终端中输入…