【linux】进程管理:进程控制块、进程号、fork创建进程、特殊进程及exec函数族解析

一、进程的概述

        可执行程序运行起来后(没有结束之前),它就成为了一个进程。程序是存放在存储介质上的一个可执行文件,而进程是程序执行的过程。进程的状态是变化的,其包括进程的创建、调度和消亡。程序是静态的,进程是动态的。

1、程序和进程的区别

        程序 静态的 占磁盘空间(存放在存储介质上的一个可执行文件)

        进程 动态的 (调度、执行、消亡),占内存空间。(进程是程序执行到结束间的这个过 程)

 2、单道和多道程序设计

        单道程序设计 所有进程一个一个排队执行。若A阻塞,B只能等待,即使CPU处于空闲状 态。这种模型在系统资源利用上及其不合理,大部分已被淘汰了。

        多道程序设计 在计算机内存中同时存放几道相互独立的程序,它们在管理程序控制之 下,相互穿插的运行。当下常见CPU为纳秒级,由于人眼的反应速度是毫秒级,所以看似同时在运行。
而多道程序设计必须有硬件基础作为保证。时钟中断(强制让进程让出cpu资源)即为多道程序设计模型的理论基础。

3、并行和并发的区别

        并行(微观)和并发(宏观)都是多个任务同时执行(多道程序)。

        并行(parallel):指在同一时刻,有多条指令在多个处理器上同时执行(微观上同时执行)(多核)

        并发(concurrency):指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执 行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时 间分成若干段,使多个进程快速交替的执行(单核 )

 4、进程控制块(PCB)

        进程运行时,内核为每个进程分配一个PCB(进程控制块),维护进程相关的信 息,Linux内核的进程控制块是task_struct结构体。 PCB存在于进程的内核空间里面。系统会为每一个进程分配一个进程ID,其类型为pid_t(非负整数) ,进程的状态,有就绪、运行、挂起、停止等状态。进程状态切换时需要保存和恢复的一些CPU寄存器。进程是系统分配资源基本单位

5、进程的状态

进程的三大状态:就绪态、执行态、等待态

  • 就绪态:执行条件全部满足,等待CPU的执行调度
  • 执行(运行)态:正在被CPU调度执行
  • 等待态:不具备CPU调度执行的执行条件,等待条件满足。 

状态机:

ps命令查看进程信息: 

选项 含义
-a 显示终端上的所有进程,包括其他用户的进 程
-u 显示进程的详细状态
-x 显示没有控制终端的进程
-w 显示加宽,以便显示更多的信息
-r 只显示正在运行的进程

查看进程状态:ps -aux 

 stat中的参数意义如下:

以树状显示进程:pstree

 二、进程号PID

        每个进程都由一个进程号来标识,其类型为 pid_t(整型),进程号的范围:0~32767。 进程号总是唯一的,但进程号可以重用。当一个进程终止后,其进程号就可以再次使用 。

  • 进程号(PID): 标识进程的一个非负整型数
  • 父进程号(PPID):父进程号
  • 进程组号(PGID): 进程组是一个或多个进程的集合。 

1、获取进程号的函数 

头文件:

#include<sys/type.h>

#include<unistd.h>

函数:

pid_t getpid(void);  

功能: 获取本进程号(PID)

参数: 无

返回值: 本进程号 

 2、获取父进程的ID

#include<sys/type.h>

#include<unistd.h>

pid_t getppid(void);

功能: 获取调用此函数的进程的父进程号(PPID)

参数: 无

返回值: 调用此函数的进程的父进程号(PPID)

3、获取进程组的ID

#include<sys/type.h>

#include<unistd.h>

pid_t getpgid(pid_t pid);

功能: 获取进程组号(PGID)<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值