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

目录

一、基础的命令

<1> ps axj 命令

<2> top 命令

<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创建之后,下面的语句执行了两次,分别是父进程和子进程分别执行了一次,而且他们的代码时共享的。这里的特性大家先记着,后面我将为大家一 一 介绍其中原理。

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

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-04-05 05:28:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-05 05:28:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-05 05:28:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-05 05:28:03       18 阅读

热门阅读

  1. Ubuntu22.04虚拟环境安装CUDA10.1, CUDNN和pytorch

    2024-04-05 05:28:03       14 阅读
  2. Qt与OpenCV实现图像模板匹配

    2024-04-05 05:28:03       13 阅读
  3. MySQL中 in 和 exists 区别

    2024-04-05 05:28:03       12 阅读
  4. 使用Python写简单的点云harris 3D关键点检测

    2024-04-05 05:28:03       13 阅读
  5. HDFS、TFS 和 Ceph的对比(通往架构师的路上)

    2024-04-05 05:28:03       9 阅读
  6. JVM剖析

    JVM剖析

    2024-04-05 05:28:03      11 阅读
  7. 图DP

    图DP

    2024-04-05 05:28:03      8 阅读
  8. Linux中关于网络方面常用命令行介绍

    2024-04-05 05:28:03       10 阅读
  9. Megatron-DeepSpeed-GPU-多机训练

    2024-04-05 05:28:03       14 阅读
  10. c++ new int[10]()会进行初始化.

    2024-04-05 05:28:03       10 阅读
  11. 【Python】【Flask】提交表单后报500错误

    2024-04-05 05:28:03       9 阅读