进程基础

本文详细介绍了进程的基础知识,包括进程与程序的区别,进程的标识(如进程ID、用户ID),内存映像结构(代码段、堆栈、全局变量等),以及进程的三态和Linux进程的七态模型,阐述了进程从创建到运行的转化过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进程基础

一、什么是程序:

    为了执行某一特定任务的一系列指令的有序集合。

程序 = 代码段 + 数据段

二、什么是进程:

从用户角度看:

进程是程序的一次执行过程`

从操作系统角度看:

>
1. 进程是分配CPU,内存、时间片等资源的基本单位
2. 进程是操作系统分配资源的最小单位
3. 进程有自己的执行状态

进程 = 程序 + 堆栈 + PCB(进程控制块)

三、进程和程序的区别:

  1. 进程是短暂的,而相对程序时永久的
  2. 进程有PCB
  3. 进程是动态的,程序时静态的
  4. 一个进程只能对应一个程序,一个程序可以对应多个进程

四、进程标识:

Linux操作系统中,每个进程都是通过唯一的进程ID标识的。进程ID是一个非负数。

标识进程的ID包括:

  • 实际用户ID(uid): 标识运行该进程的用户
  • 有效用户ID(euid): 标识以什么身份来运行进程。例如,某个普通用户A,运行了一个程序,而这个程序是以root身份来运行的,这程序运行时就具有root权限。此时实际用户ID是A用户的ID,而有效用户ID是root用户的ID。
  • 实际组ID(gid): 它是实际用户所属的组的组ID
  • 有效组ID(egid): 有效组ID是有效用户所属的组的组ID

五、进程的内存映像:

解释(由低到高):
  1. 代码段:即二进制机器代码,代码段是只读的,可被多个进程共享。如果一个进程创建了一个子进程,父子进程共享代码段。
  2. 已被初始化的全局变量和静态局部变量:存储已被初始化的全局变量和静态局部变量。
  3. 未被初始化的全局变量和静态局部变量:存储未被初始化的的全局变量和静态局部变量。
  4. 堆:用于存放程序运行中动态分配的变量。
  5. 栈:用于函数调用,保存函数的返回地址、函数的参数、函数内部定义的局部变量。
  6. 命令行参数和环境变量:存储命令行参数和环境变量

六、进程的三态:

三态包括:运行态、阻塞态和就绪态。

七、Linux进程七态:

  • 运行状态(与就绪态合并):进程正在运行或在运行队列中等待运行
  • 可中断睡眠状态:进程正在等待某个事件完成(如等待数据到达)。等待过程中可以被信号或定时器唤醒。
  • 不可中断睡眠状态:进程也在等待某个事件完成,在等待中不可以被信号或定时器唤醒,必须等待直到等待的事件发生。
  • 僵尸状态:进程已终止,但进程描述符依然存在,直到父进程调用wait()函数获取到它的退出状态后释放。
  • 停止状态:进程因为收到SIGSTOP、SIGTSTP、SIGTIN、SIGTTOU信号后停止运行或者该进程正在被跟踪(调试程序时,进程处于被跟踪状态)。

使用ps命令可以查看进程的当前状态:

ps -efl  
截图:

其中运行状态为R(runnable),可中断睡眠状态为S(sleeping),不可中断睡眠状态为D(uninterruptible sleep), 僵尸状态为Z(zombile),停止状态为T(traced or stopped)。

八、进程转化为进程通常要经过以下步骤:

  1. 内核为进程其分配pid,分配PCB
  2. 内核为进程分配地址空间,将程序读入内存
  3. 内核将进程置为就绪状态
  4. 将进程放到就绪队列中等待操作系统调度程序调度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值