Linux 学习之路 - 进程篇 - PCB介绍1-标识符

目录

一、基础的命令

[<1> ps axj 命令](#<1> ps axj 命令)

[<2> top 命令](#<2> top 命令)

[<3> proc 目录](#<3> proc 目录)

二、进程的标识符

<1>范围

<2>如何获取标识符

<3>bash进程

三、创建进程


一、基础的命令

前面介绍了那么多,但是我们没有观察到进程相关状态,所以下面我们介绍几个命令,帮助查看进程

<1> ps axj 命令

这个命令就能查看当前所有进程相关信息,其中ps命令通常就是用于查看当前运行的程序。其他的选项暂时不做介绍。

下面我演示一个进程供大家参考

这里先在test.c文件里一段循环代码(如果我们不用循环,进程会很快的开始并销毁,我们没法观察到)

运行该程序,并打开另一个终端,观察这个程序是否为终端

此时我们就会发现,这里面有两个进程,一个是./tt.c 另一个是 grep 命令,grep命令也是进程是因为我们在筛选这个过程本身也就是一个程序,程序运行就是一个进程。这里我们就可以发现,几乎任何的独立的指令就是一个程序,一运行就是一个程序。

<2> top 命令

top命令也能查看一些进程的信息,只不过相对上一个命令,这个命令观察到的进程信息相对限,这个命令主要由于检测系统的运行情况,跟windows操作系统的任务管理器类似,具有监管的功能。

<3> proc 目录

在 /proc 目录下,我们也可以查看进程的信息,不过这里涉及文件系统的相关知识,这里大家简单了解一下就好

这些数字代表就是具体的进程,我们可以进入其中查看对应的数据

这里我们可以看见两个显眼的数据,一个是exe,对应的是磁盘里的对应路径的可执行程序,另外一个cwd就表示当前的工作目录,这也就是我们在我们能在创建文件时,系统默认就能创建在当前目录下的原因。(其他的数据暂不做了解)这里我们是能够修改这个路径的,使用chdir 接口就能完成该操作

只要在chdir 中输入新的文件路径,就修改当前的工作路径。

二、进程的标识符

<1>范围

在操作系统中常常要运行大量的进程,为了方便管理,操作系统给每一个进程都分配了一个标识符,通过标识符唯一确定这个进程。

在64位机器下,这个进程标识符的范围将达到2的22次方。这里的"1"号进程其实就是init进程,也就是系统进程。

<2>如何获取标识符

在了解完标识符的大小后,下面就是怎么获取的问题,在进程被创建时,系统就会自动个这个进分配进程号,我们可以通过getpid这个函数来获取一个进程的标识符(pid)

这里的pid_t其实就个进程都有一是个整数,只不过系统做了重命名。getpid可以获得当前进程的pid , getppid可以获得父进程的pid,这两个函数是系统调用的函数。每一个父进程,每一个进程都会在自己的PCB里加入自己父进程的ppid。

<3>bash进程

我们先用getpid和getppid获得父子进程的进程号,然后运行一个简单的程序。

运行该程序

我们可以发现,每次运行程序,程序的pid都不同,但是ppid都是一样,说明我们运行的程序都是由同一个父进程创建的,我们再用ps命令查看该pid对应的进程

这里我们可以看见,创建子进程的是一个bash命令,这里bash其实就是命令行解释器,这也是一个进程。

三、创建进程

创建进程我们可以使用fork命令,这里我们打开man手册,可以查看对应的信息

我们可以看见,这里的fork就是创建一个子进程,这里我们可以写一段演示代码,来了解fork函数的特性。

退出运行代码

当前ppid为815其实就是bash进程(这里我是在不同的时间段写的,所以bash的进程号会和上文的进程号不同,这个可以通过ps命令自行查看,这里我就不演示了)。这里我们可以看到会有三个输出,说明在fork创建之后,下面的语句执行了两次,分别是父进程和子进程分别执行了一次,而且他们的代码时共享的。这里的特性大家先记着,后面我将为大家一 一 介绍其中原理。

感谢各位读者的阅读,希望我的文章对各位有些帮助,如果文中有不当之处还望各位大佬指正,谢谢!!!

相关推荐
西岸行者5 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意5 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码5 天前
嵌入式学习路线
学习
毛小茛5 天前
计算机系统概论——校验码
学习
babe小鑫5 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms5 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下5 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。5 天前
2026.2.25监控学习
学习
im_AMBER5 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J5 天前
从“Hello World“ 开始 C++
c语言·c++·学习