进程概念和基本操作
什么是进程
进程 = 内核数据结构 (task_struct) + 自己的程序代码和数据
内核数据结构(struct task_struct):这是进程的'学籍信息',包含了进程的 PID、优先级、内存地址、状态等元数据,是操作系统管理进程的核心。 程序的代码和数据:这是进程的'本人',即被加载到内存中的可执行程序内容。
传统教材常说:'运行起来的程序就是进程'或'加载到内存的程序叫做进程'。但是这种说法只强调了'代码和数据加载到内存',忽略了内核为管理进程而维护的数据结构,显得过于片面,不易理解。
为什么要有进程
从软件角度讲,把你的二进制可执行程序加载到内存的过程,就叫做创造进程。
进程的实现机制
描述进程---PCB
进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。
- 课本上称之为 PCB(Process Control Block),Linux 操作系统下的 PCB 是:task_struct。
- task_struct 是 PCB 的一种。
- 在 Linux 中描述进程的结构体叫做 task_struct。
- task_struct 是 Linux 内核的一种数据结构类型,它会被装载到 RAM(内存)里并且包含着进程的信息。
task_struct
主要字段
- 标示符:描述本进程的唯一标示符,用来区别其他进程。
- 状态:任务状态,退出代码,退出信号等。
- 优先级:相对于其他进程的优先级。
- 程序计数器:程序中即将被执行的下一条指令的地址。
- 内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针。
- 上下文数据:进程执行时处理器的寄存器中的数据。
- I/O 状态信息:包括显示的 I/O 请求、分配给进程的 I/O 设备和被进程使用的文件列表。
- 记账信息:可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
- 其他信息
进程在内核中的组织
可以在内核源代码里找到它。所有运行在系统里的进程都以 task_struct 双链表的形式存在内核里。

查看进程
我们可以用指令来查看进程:ps axj | grep ./[可执行程序]
/proc
进程的信息可以通过 /proc 系统文件夹查看。 如:要获取 PID 为 1 的进程信息,你需要查看 /proc/1 这个文件夹。

ls /proc/[PID]









































