Linux进程理解

news2024/9/21 20:46:49

一、进程的理解

首先我们知道我们的操作其实都是在运行程序,不仅是在windows上打开软件还是在Linux上执行指令,而程序存在于磁盘上,程序的要想运行就要把程序的代码和数据从磁盘加载到内存,那么到这一步是创建了一个进程吗?其实不是,实际上在程序运行起来后,CPU还会创建一个PCB(process control block)进程控制块,描述一个进程的结构体。此时才算是一个进程被创建。

所以我们得到了一个关键信息:进程 = PCB + 代码 + 数据

所以现在操作系统就进程的控制就变成了对链表(内核数据结构)的增删查改。

二、Linux中的进程

PCB是对进程的总称,在Linux中是struct task_struct

所以调度进程本质就是让进程控制块进行排队。

进程 = 内核task_struct + 代码 + 数据

进程的动态运行:task_struct在不同队列中访问不同资源。

三、task_struct的内部属性

1、启动进程

(1)./xxx

让系统创建进程并执行。

自己写的代码的可执行程序 == 系统命令 == 可执行文件

(2)pid

每一行进程都有自己的标识符pid 

指令 ps ajx head -1 && ps ajx | grep 文件名       可以查看进程与头部信息

(3)显示pid

一个进程想知道自己的pid一般是不能从指令中直接拿到的,因为操作者不能越过操作系统来对底层进行访问。所以我们要使用系统给我们的接口,也就是系统调用来查看。

头文件 #include<sys/types.h>   #include<unistd.h>

函数 getpid()

(4)程序的终止与消除

ctrl c:终止程序

kill -9 pid:杀掉程序

2、进程的创建

(1)为什么我们要创建子进程?

因为我们想让子进程执行与父进程不一样的代码。

(2)父进程的ppid要通过 getppid() 函数获得。

(3)如何创建子进程?

用fork()函数可以创建子进程。

注意到fork()函数返回值是pid_t,其实fork()会有两个返回值,一个等于0代表子进程,一个返回子进程的pid大于0,是父进程,若返回值小于0,那就是出现错误。

那为什么fork()函数会有两个返回值呢?
其实在fork()内部已经有父子进程,分别返回两个值。

(4)task_ struct内容分类

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

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

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

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

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

上下文数据: 进程执行时处理器的寄存器中的数据。

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

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

其他信息

(5)组织进程

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

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

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

相关文章

c#中的特性

在C#中&#xff0c;特性&#xff08;Attributes&#xff09;是一种向程序元素&#xff08;如类、方法、属性等&#xff09;添加元数据的方式。特性可以用来提供关于程序元素的附加信息&#xff0c;这些信息可以在编译时和运行时被访问。 特性主要有以下几个用途&#xff1a; 提…

北京交通大学《深度学习》专业课,实验2-前馈神经网络

1. 源代码 见资源“北京交通大学《深度学习》专业课&#xff0c;实验2-前馈神经网络” 2. 实验内容 &#xff08;1&#xff09;手动实现前馈神经网络解决上述回归、二分类、多分类任务 分析实验结果并绘制训练集和测试集的loss曲线 &#xff08;2&#xff09;利用to…

GUI界面开发之tkinter(一)

Tkinter是一个内置的Python库&#xff0c;用于创建图形用户界面&#xff08;GUI&#xff09;。它提供了一组工具和小部件&#xff0c;用于创建窗口、对话框、按钮、菜单和其他GUI元素。 在本篇文章中&#xff0c;主要介绍了窗口等知识点。 大家好&#xff01;我是码银&#x1…

STM32MP135裸机编程:烧录程序到EMMC的方法

0 前言 STM32MP135支持多种启动方式&#xff0c;包括SD卡、NAND Flash、EMMC等&#xff0c;基于STM32MP135裸机的SD卡烧录操作方法我们之前已经介绍过&#xff0c;现在介绍的STM32MP135烧录到EMMC的方法又和前面烧录到SD卡的操作有所不同。本文将介绍基于STM32MP135&#xff0…

缓存的击穿及解决方案

定义及图解 缓存击穿的意思是对于设置了过期时间的key&#xff0c;缓存在某个时间点过期的时 候&#xff0c;恰好这时间点对这个Key有大量的并发请求过来&#xff0c;这些请求发现缓存过期一般都会从后端 DB 加载数据并回设到缓存&#xff0c;这个时候大并发的请求可能会瞬间把…

Flutter 调用Google内购支付最新教程

前言: 各位同学大家好, 之前看到有人在群里问flutter 怎么调用Google支付, 今天就准备整理写一篇文章。 效果图 实现方式: 我们是通过flutter和安卓交互 然后在原生安卓里面加入了内购支付结算库的依赖 最后调起的Google 支付 安卓原生内购支付教程 flutter 端代码 我…

Go: IM系统开发及注意事项

概述 使用Go语言打造支持&#xff0c;同时十万人在线的IM系统系统单机支持十万人&#xff0c;如果分布式部署后&#xff0c;支持数百万都是可以的IM 系统&#xff0c; 即时通讯(Instant Messaging)&#xff0c;比如说我们的微信&#xff0c;QQ 等IM 系统&#xff0c;它具备非常…

软件测试服务公司分享:系统测试和验收测试有什么联系和区别?

软件系统测试是指对软件系统的各个模块、组件以及整个系统进行全面检查和验证的过程。它旨在检测系统的功能是否符合需求、是否能够正常运行以及是否存在潜在的问题。在软件开发的整个生命周期中&#xff0c;系统测试是一个非常重要且必不可少的环节。 软件验收测试是软件在开…

vs code 启动react项目,执行npm start报错原因分析

1.执行 npm start错误信息&#xff1a;npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果包括路径&#xff0c;请确保路径正确&#xff0c;然后再试一次。 所在位置 行:1 字符: 1 npm start ~~~ CategoryInfo …

记录些Spring+题集(1)

接口防刷机制 接口被刷指的是同一接口被频繁调用&#xff0c;可能是由于以下原因导致&#xff1a; 恶意攻击&#xff1a;攻击者利用自动化脚本或工具对接口进行大量请求&#xff0c;以消耗系统资源、拖慢系统响应速度或达到其他恶意目的。误操作或程序错误&#xff1a;某些情…

【正点原子i.MX93开发板试用连载体验】录音小程序采集语料

本文最早发表于电子发烧友论坛&#xff1a;【新提醒】【正点原子i.MX93开发板试用连载体验】基于深度学习的语音本地控制 - 正点原子学习小组 - 电子技术论坛 - 广受欢迎的专业电子论坛! (elecfans.com) 接下来就是要尝试训练中文提示词。首先要进行语料采集&#xff0c;这是一…

C双指针元素去重

需求 在尾部插⼊、删除元素是⽐较⾼效的&#xff0c;时间复杂度 是 O(1)&#xff0c;但是如果在中间或者开头插⼊、删除元素&#xff0c;就会涉及数据的搬移&#xff0c;时间复杂度为 O(N)&#xff0c;效率较低。 代码 #include <stdio.h>// 相邻元素去重 int remove…

Linux-管道

管道&#xff1a;把一个命令的输出&#xff0c;通过管道连接&#xff0c;作为另一个命令的输入。管道的工作原理是通过一段共享内存来实现数据的传输&#xff0c;其中一个进程向管道写入数据&#xff0c;另一个进程则从管道的另一端读取数据。 1.可以通过ls -lh罗列出当前文件…

Smartbi体验中心升级新装,全产品线沉浸式体验

为了让用户更好地了解Smartbi产品在数据分析中的价值和能力&#xff0c;优化用户的产品体验&#xff0c;我们近期对Smartbi在线体验中心进行了全新改版和系统调优。本次更新内容包括全新首页、全新行业示例Demo、新增产品核心功能Demo&#xff0c;并优化了现有的Demo。让我们一…

直播预告|V学院|干货预警!2.5D、流光、动效?一次掌握!

随着可视化行业持续发展&#xff0c;可视化设计随之不断进化升级&#xff0c;对于设计师的视觉审美、设计能力和灵活运用等要求也随之进阶。可视化设计越来越卷了&#xff0c;设计师需要了解市场上的热点效果、优秀案例&#xff0c;持续学习&#xff0c;才能随行业发展不断进步…

C基础day9

一、思维导图 二、课后练习 1> 使用递归实现 求 n 的 k 次方 #include<myhead.h>int Pow(int n,int k) {if(k 0 ) //递归出口{return 1;}else{return n*Pow(n,k-1); //递归主体} }int main(int argc, const char *argv[]) {int n0,k0;printf("请输入n和k:&…

合合TextIn - 大模型加速器

TextIn是合合信息旗下的智能文档处理平台&#xff0c;在智能文字识别领域深耕17年&#xff0c;致力于图像处理、模式识别、神经网络、深度学习、STR、NLP、知识图谱等人工智能领域研究。凭借行业领先的技术实力&#xff0c;为扫描全能王、名片全能王等智能文字识别产品提供强大…

Jeecgboot vue3的选择部门组件JSelectDept如何实现只查询本级以及子级的部门

jeecgboot vue3的文档&#xff1a;地址 JSelectDept组件实现了弹窗然后选择部门返回的功能&#xff0c;但部门是所有数据&#xff0c;不符合需求&#xff0c;所以在原有代码上稍微改动了一下 组件属性值如下&#xff1a; 当serverTreeDatafalse的时候&#xff0c;从后端查询…

在uniapp中如何使用地图

1&#xff0c;技术选择 最好是使用webview html形式加载&#xff0c;避免打包app时的地图加载问题 2&#xff0c;webview使用 使用webview必须按照官方文档,官网地址&#xff1a;https://uniapp.dcloud.net.cn/component/web-view.html <template><view><!…

windows电脑的linux虚拟机连接电脑网络的方法

一、虚拟机新建网络适配器,将其设置为NAT模式 子网等信息就不知道该设置什么网段的先就设置为192.168.0.x,后面可以修改 二、电脑设置 1.网络和Internet>高级网络设置 2.编辑虚拟网络NAT适配器 &#xff08;1&#xff09;选中"自动获取ip地址",确认 3.编辑WLAN…