文章目录
一,进程基本概述
1,描述
- 进程是已启动的可执行程序的运行中实例。
- cpu的工作机制是分时进行的,通过内核来进行调度,通过纳秒来计量工作时间的。
/proc目录下以数字为名的目录,每一个目录代表一个进程,保存着进程的属性信息,每一个进程的PID是唯一的,就算进程退出了,下一个进程也不会使用此PID。
2,进程的组成部分
- 已分配内存的地址空间
- 安全属性,包括所有权凭据和特权
- 程序代码的一个或多个执行线程
- 进程状态
3,进程环境
- 本地和全局变量
- 当前调度上下文
- 分配的系统资源,如文件描述符和网络端口
4,进程的产生
- /proc//pidfd:(fd-file describe;文件描述符)
- 父进程—子进程:
现有的父进程复制字节的地址空间(fork)来创建一个新的子进程结构
每一个新进程分配有唯一的进程ID(PID),满足跟踪和安全性之需,PID与父进程ID(PPID)是新进程环境的元素。
- 任何进程可创建子进程,所有的进程都是第一个系统进程的后代,第一个系统进程是systemd
通过fork进程,子进程继承安全性身份,过去的和当前的文件描述符、端口和资源特权、环境变量,以及程序代码。随后,子进程可能exec其自己的程序代码。
通常,父进程在子进程运行期间处于睡眠状态,设置一个在子进程完成时发出信号的请求(wait)。在退出时,子进程可能已经关闭或丢弃了其资源和环境,剩余的部分被称作僵停zmbie(僵尸)。父进程在子进程退出时收到信号而被唤醒,清理剩余结构,然后继续执行其自己的程序代码。
5,进程的分类
- 前台进程:与终端相关的进程,通过终端启动的进程:
也可把前台启动的进程送往后台处理,以守护模式运行,通过&将进程挂起。
- 守护进程:daemon,与终端无关的进程(如内核),在系统引导过程中启动的进程
- zombie(僵尸进程)通过重启系统毁灭僵尸进程
二,进程状态
- Excuting :运行状态
- ** Ready:就绪态,也可称作睡眠态**
a Uninterruptible sleep //不可终端的睡眠,不可随时唤醒,只有当IO资源加载成功后才能被唤醒。
b ,interruptible //可终端的睡眠,可随时唤醒。
-
Zombie :僵尸进程,正常的运行结束了,但是不释放暂据的内存。
-
Stopped://停止状态,暂停于内存中,但不会被调度,除非手动启动之
-
进程睡眠的原因:
当一个执行中的进程,需要加载额外的IO资源的时候,由于IO设备的速度太慢,所以会转入睡眠状态等待,交出CPU给其他进程,以免浪费剩余执行时间
在多任务处理操作系统中,每个CPU(或CPU核心)在一个时间点上处理一个进程。在进程运行时,它对CPU时间和资源分配的直接要求会有变化。进程分配有一个状态,它随着环境要求而改变。
- Linux进程状态
标志 | 内核定义的状态名称和描述 |
---|---|
R | TASK_RUNNING:进程正在CPU上执行,或者正在等待运行。处于运行中(或可运行)状态时,进程可能正在执行用户例程或内核例程(系统调用),或者已排队并就绪 |
S | TASK_INTERRUPTIBLE:进程处于睡眠状态且正在等待某一条件:硬件请求、系统资源访问或信号。当事件或信号满足该条件时,该进程将返回到运行中 |
D | TASK_UNINTERRUPTIBLE:此进程也在睡眠,但与S状态不同,不会响应传递的信号。仅在特定的条件下使用,其中进程中断可能会导致意外的设备状态 |
K | TASK_KILLABLE:进程处于睡眠状态,与不可中断的D状态相同,但有所修改,允许等待中的任务通过响应信号而被中断(彻底退出)。实用程序通常将可中断的进程显示为D状态 |
T | TASK_STOPPED:进程已被停止(暂停),通常是通过用户或其他进程发出的信号。进程可以通过另一信号返回到运行中状态,继续执行(恢复) |
T | TASK_TRACED:正在被调试的进程也会临时停止,并且共享同一个T状态标志 |
z | EXIT_ZOMBIE:子进程在退出时向父进程发出信号。除进程身份(PID)之外的所有资源都已释放 |
X | EXIT_DEAD:当父进程清理(获取)剩余的子进程结构时,进程现在已彻底释放。此状态从不会在进程列出实用程序中看到 |
< | 高优先级进程 |
N | 低优先级进程 |
+ | 前台进程组中的进程 |
| | 多线程进程 |
s | 会话进程首进程 |