大家好,我是knight-n。本篇文章我将为大家介绍进程的概念。
什么是进程
进程是程序的基本执行实体,是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配的基本单位,是操作系统结构的基础。通俗的说进程就是运行的程序。
PCB
进程是运行的程序。既然它在操作系统上运行,那么它一定会占用系统资源。所以操作系统就要对进程进行管理。PCB就是操作系统中用于描述和管理进程的数据结构。包含了进程的管理和控制信息,是进程管理和控制的最重要的数据结构。
每个正在运行的进程都有一个对应的进程PCB,它在进程创建时建立,伴随进程运行的全过程,直到进程撤销而撤销。Linux操作系统下的PCB是: task_struct。
task_struct中的内容可分为以下几类:
标示符: 描述本进程的唯一标示符,用来区别其他进程。
状态: 任务状态,退出代码,退出信号等。
优先级: 相对于其他进程的优先级。
程序计数器: 程序中即将被执行的下一条指令的地址。
内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。
I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
其他信息
进程标识符
进程标识符简称PID是唯一标识进程的数值。在操作系统中,每个进程都有一个唯一的进程标识符,用于区分不同的进程。和PCB相同在进程创建时由操作系统分配,并在进程终止时回收。PID就是进程的身份证号。我们可以通过系统调用获取当前进程的PID。
getpid()用来取得目前进程的进程识别码即PID。返回值类型是pid_t ,返回当前进程的pid。我们编写一段程序来帮助大家理解。
我们运行这段程序
所以当前进程的PID是13225。
子进程
子进程是由父进程创建的进程。在Linux中,子进程是父进程的一个副本,它会继承父进程的许多属性,如环境变量、打开的文件描述符和信号处理方式等。子进程有自己的PID,是一个独立的实体,可以独立于父进程运行。
进程创建
在Linux下我们可以使用fork()系统调用来创建当前进程的子进程。
fork()会为当前进程创建一个子进程。返回值是pid_t,和普通函数不同,fork()有两个返回值。当创建成功时会为子进程返回0,为父进程返回子进程的pid。当创建失败时fork()返回一个负值。
下面是一个简单的示例代码:
运行结果:
以上就是本文的全部内容,感谢观看!