006 Linux 进程的概念 | 获取进程的PID

前言

本文将会向您进程的概念,程序与进程的区别,如何获取进程的标识符-pid

文章重点

1.描述进程——PCB
进程与程序的区别
CPU对进程列表的处理
2.获取进程PID

描述进程-PCB

进程概念

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

区分程序和进程

1.程序:程序本质上就是一个文件,是静态的,存储在磁盘中
2.进程:程序运行起来之后,就叫做进程,进程是动态的,由操作系统进行管理

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

struct data
{
//id 标识符 
//代码/函数地址 
//状态(是否被CPU处理)
//优先级
struct data* next 
}

这个进程属性的结构体被称为PCB,也叫做进程控制块
进程具体的属性如下:

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

CPU对于进程列表的处理

进程被链接到链表中会等待CPU去PCB找数据做处理,那么CPU怎么知道要处理哪些数据呢?

进程排队:把对应的PCB从链表中提取到队列中排队,PCB中的数据不会一次性被CPU处理完,它有时被处理,有时在等待被处理

在这里插入图片描述
结论

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

进程标识符

每一个进程都有自己对应的pid,查看当前进程的信息:
什么是进程的pid呢?

进程的pid是指进程的唯一标识符,即进程ID(ProcessID)。每个正在运行的进程都有一个唯一的pid,用于操作系统在管理和跟踪进程时进行标识和区分。

ps ajx

在这里插入图片描述
这种方式将全部的进程信息打印了出来,不太好观察学习
可以利用死循环来观察

 #include<stdio.h>  #include<unistd.h>  int main()  {while(1) //死循环{printf("我已经是一个进程了\n");sleep(1); //休眠一秒                                                                                                                                         }                                       return 0;                           }

在这里插入图片描述
我们可以使用以下命令来获取进程的标识符pid

在所有进程中搜索刚写的可执行程序并将进程的第一行打印:
ps ajx | head -1 && ps ajx | grep target | ps ajx | head -1

在这里插入图片描述

getpid、getppid

PPID:父进程的标识符
观察到图中两个红色的target行处,第一行是我们启动的进程,第二行是grep这个命令的进程
我们也可以选择另外一种方式来获取进程的pid
man手册中记录了getpid,getppid的使用
在这里插入图片描述
我们使用的getpid和getppid是系统调用函数
而在冯诺依曼体系中讲到,如何用户想要访问
底层的数据必须经过系统调用
在这里插入图片描述

 #include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <sys/types.h>int main(){pid_t id = getpid();while(1){printf("我已经是一个进程了,我的pid是:%d\n",id);sleep(1);}return 0;}

在这里插入图片描述
获取父进程pid

 #include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <sys/types.h>int main(){pid_t id = getpid();pid_t parid = getppid();while(1){printf("我已经是一个进程了,我的pid是:%d...我的ppid是:%d\n",id,parid);sleep(1);}return 0;}

然后我们再运行程序
观察到每一次的运行子进程的pid都会发生改变,而父进程的pid却不会变化
在这里插入图片描述

原因是每次运行时,操作系统会为每个新的子进程分配一个唯一的进程标识符(PID)。这是因为PID是一个用于标识进程的数字,它是在操作系统内部维护的一个计数器。当一个进程终止后,其PID就会被释放,并可以被其他新的进程重新使用。
在命令行中,父进程一般是命令行解释器:bash

小结

今日的分享就到这里啦,本文仅仅是对进程的概念进行了描述,后续将会持续更新fork、进程状态等相关知识点,如果本文存在疏漏或错误的地方还请您能够指出!

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

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

相关文章

C语言,数据结构指针,结构构体操作符 •,->,*的区别,看这篇就够了

在朋友们学习指针和数据结构这一章的时候&#xff0c;对各种操作符云里雾里。当你看到这么文章之后你就会明白了。 一 • 和 ->运算符 • 运算符&#xff1a;是结构变量访问结构体成员时用的操作符 -> 运算符&#xff1a;这是结构体指针访问结构体成员时调用的运算符。 …

基于java+springboot+vue的游戏道具管理系统

项目介绍 本论文主要论述了如何使用JAVA语言开发一个游戏道具管理系统 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述校园出入管理系统的当前背景以及系统开…

02-React组件与模块

组件与模块 前期准备 安装React官方浏览器调试工具&#xff0c;浏览器扩展搜索即可 比如红色的React就是本地开发模式 开启一个用React写的网站&#xff0c;比如美团 此时开发状态就变成了蓝色 组件也能解析出来 何为组件&模块 模块&#xff0c;简单来说就是JS代…

音视频rtsp rtmp gb28181在浏览器上的按需拉流

按需拉流是从客户视角来看待音视频的产品功能&#xff0c;直观&#xff0c;好用&#xff0c;为啥hls flv大行其道也是这个原因&#xff0c;不过上述存在的问题是延迟没法降到实时毫秒级延迟&#xff0c;也不能随心所欲的控制。通过一段时间的努力&#xff0c;结合自己闭环技术栈…

使用合成数据训练语义分割模型

计算机视觉应用现在在各个科技领域无处不在。 这些模型高效且有效&#xff0c;研究人员每年都会尝试新想法。 新的前沿是试图消除深度学习的最大负担&#xff1a;需要大量的标记数据。 正如本文所述&#xff0c;此问题的解决方案是使用合成数据。 从这些研究中获益最多的计算机…

FMC+DAM驱动LVGL刷屏

前提条件 使用FMC驱动LCD刷屏 LVGL移植 开启DMA 需要开启MEMTOMEMDMA。 开启MPU 有MPU时需要 使能I-cache D-cache时 使用DMA传输数据时要保证数据的完整行和准确性 修改代码 逻辑 等待DMA传输完成然后再刷屏。 修改 在DMA初始化函数中最后添加 注册DMA传输完成调用函…

k8s:二进制搭建 Kubernetes v1.20

目录 1 操作系统初始化配置 2 部署 etcd 集群 2.1 准备签发证书环境 2.2 生成Etcd证书 3 部署 docker引擎 4 部署 Master 组件 5 部署 Worker Node 组件 k8s集群master01&#xff1a;192.168.30.105 kube-apiserver kube-controller-manager kube-scheduler etcd k8s集…

05-流媒体-RTMP协议介绍

05-流媒体-RTMP协议介绍 1.RTMP概述 RTMP是一种常见的流媒体协议,是基于TCP/IP协议模型的应用层协议,工作在TCP协议上,端口是1935。通过TCP三次握手保证传输的可靠。 2.握手 2.1 握手过程 RTMP基于传输层TCP连接后,通过RTMP握手协议来完成RTMP连接。客户端和服务端各发…

将Series中每个值v替换为v在Series中升序排列时的位置值s.rank()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 将Series中每个值v 替换为v在Series中 升序排列时的位置值 s.rank() 选择题 下列代码执行三次排名索引a的名次值分别为&#xff1f; import pandas as pd s pd.Series([3,2,0,3],index list…

分享96个工作总结PPT,总有一款适合您

分享96个工作总结PPT&#xff0c;总有一款适合您 工作总结PPT下载链接&#xff1a;https://pan.baidu.com/s/18AriuVGxwINHrmgndX74dw?pwd8888 提取码&#xff1a;8888 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不易…

【kafka】记一次kafka基于linux的原生命令的使用

环境是linux&#xff0c;4台机器&#xff0c;版本3.6&#xff0c;kafka安装在node 1 2 3 上&#xff0c;zookeeper安装在node2 3 4上。 安装好kafka&#xff0c;进入bin目录&#xff0c;可以看到有很多sh文件&#xff0c;是我们执行命令的基础。 启动kafka&#xff0c;下面的…

python 深度学习 解决遇到的报错问题9

本篇继python 深度学习 解决遇到的报错问题8-CSDN博客 目录 一、can only concatenate str (not "int") to str 二、cant convert np.ndarray of type numpy.object_. The only supported types are: float64, float32, float16, complex64, complex128, int64, in…

74HC138逻辑芯片

文章目录 74系列逻辑芯片——74HC138基础信息描述特征应用范围 功能信息封装引脚基本电路 扩展性能分析 74系列逻辑芯片——74HC138 基础信息 描述 74HC138器件设计用于需要极短传播延迟时间的高性能存储器解码或数据路由应用&#xff1b;在高性能存储系统中&#xff0c;可使用…

二叉树采用二叉链表存储:编写计算二叉树最大宽度的算法(二叉树的最大宽度是指二叉树所有层中结点个数的最大值)

二叉树采用二叉链表存储&#xff1a;编写计算二叉树最大宽度的算法 &#xff08;二叉树的最大宽度是指二叉树所有层中结点个数的最大值&#xff09; 和二叉树有关的代码&#xff0c;基本都逃不过“先中后层”&#xff0c;这四种遍历 而我们这里是让你计算最大宽度&#xff0c…

Hydra post登录框爆破

文章目录 无token时的Hydra post登录框爆破带Token时的Hydra post登录框爆破 无token时的Hydra post登录框爆破 登录一个无验证码和token的页面&#xff0c;同时抓包拦截 取出发送数据包&#xff1a;usernameadb&password133&submitLogin 将用户名和密码替换 userna…

【2024最新】PE工具箱【下载安装】零基础到大神【附下载链接】

下载链接&#xff1a;点这里 1.PE (Portable Executable) 工具箱通常用于处理Windows可执行文件和动态链接库&#xff08;DLL&#xff09;的二进制文件格式。这些工具对于进行逆向工程、软件分析和系统维护等任务非常有用。以下是PE工具箱的一些常见功能和用法&#xff1a; 查…

【C语言进阶】之动态内存管理笔试题及柔性数组

【C语言进阶】之动态内存管理笔试题 1.动态内存管理笔试题汇总1.1第一道题1.2第二道题1.3第三道题1.4第四道题 2.C/C内存管理3.柔性数组3.1什么是柔性数组3.2柔性数组的使用3.2柔性数组的优点 &#x1f4c3;博客主页&#xff1a; 小镇敲码人 &#x1f680; 欢迎关注&#xff1a…

Webpack搭建本地服务器

一、搭建webpack本地服务 1.为什么要搭建本地服务器&#xff1f; 目前我们开发的代码&#xff0c;为了运行需要有两个操作&#xff1a; 操作一&#xff1a;npm run build&#xff0c;编译相关的代码&#xff1b;操作二&#xff1a;通过live server或者直接通过浏览器&#x…

Draft-P802.11be-D3.2协议学习__$9-Frame-Format__$9.3.1.22-Trigger-frame-format

Draft-P802.11be-D3.2协议学习__$9-Frame-Format__$9.3.1.22-Trigger-frame-format 9.3.1.22.1 Genreal9.3.1.22.2 Common Info field9.3.1.22.3 Special User Info field9.3.1.22.4 HE variant User Info field9.3.1.22.5 EHT variant User Info field9.3.1.22.6 Basic Trigge…

4K Video Downloader Pro v4.28.0(视频下载器)

4K Video Downloader Pro是一款专业的视频下载软件&#xff0c;支持从YouTube、Vimeo、Facebook、Instagram、TikTok等主流视频网站下载高质量的4K、HD和普通视频。它的操作流程简单&#xff0c;只需复制视频链接并粘贴到软件中即可开始下载。此外&#xff0c;该软件还提供了多…