文章目录
1. 什么是进程?
1.1 基本概念
在课本的概念中,进程程序的一个执行实例,正在执行的程序。其内核观点:担当分配系统资源(CPU时间,内存)的实体。但这些概念太笼统,并不能让我们更加清晰的知道进程是什么,实际上,进程是内核数据结构(pcb) + 程序的代码与数据。
pcb(process control block)进程控制块,进程信息被放在一个叫pcb的数据结构中,可以理解为进程属性的集合。在Linux入门学习:深刻理解计算机硬件与OS体系中,我们已经了解到操作系统对我们的硬件进行管理的基本思想----先描述,后组织,pcb就是操作系统用于描述进程的数据结构。
Linux操作系统下的PCB是: task_struct,也就是说Linux描述进程的结构体叫做task_struct,task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息。
1.2 task_struct
在Linux系统中,task_struct一般包含以下信息:
标示符: 描述本进程的唯一标示符,用来区别其他进程。
状态: 任务状态,退出代码,退出信号等。
优先级: 相对于其他进程的优先级。
程序计数器: 程序中即将被执行的下一条指令的地址。
内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。
I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
其他信息
2. 组织进程
Linux描述完进程task_struct,在内存中,他是怎么将他们组织起来的?答案:是以链表的形式组织起来的!
进程与进程之间:

在内存中,程序文件一般在磁盘,我们要运行时,先在内存中拷贝一份exe文件,再进程管理的指针中,插入新的task_struct,这个新的task_struct会有成员管理内存中加载的exe,并加载这个exe对应的属性到进程之中。
内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针

由此,我们可以知道一个事实:我们在Windows双击一个exe文件,把他运行起来,实质上,就是在系统中创建了一个新的进程!在Linux中的,像ls , pwd指令,本质上也是运行了一个exe,创建了一个进程,只不过运行完就直接退出了,而在Windows上的很多软件是常驻进程,一般运行了之后就不会再退出了,没有"运行完"的说法,除非用户直接×掉,直接终止运行。
3. 查看进程
3.1 父进程与子进程
pid – 进程id
ppid – 父进程id
先要明白一个概念:在Linux操作系统中,创建新进程的时候,都是由自己的父进程创建的!!在C语言中,我们可以通过函数getpid与getppid,来查看当前启动的C语言程序的pid与ppid。
我们先来观察一个现象:在Linux中写下这样的一段代码
#include <stdio.h>
#include <unistd.h>
int main()
{
while(

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



