|
高士涛-学习日报 |
|||||||
|
姓名 |
高士涛 |
日期 |
2023/05/11 |
部门 |
云服务业务部 |
导师 |
王晓明 |
|
学习工作内容 |
|||||||
|
Linux程序与进程 |
|||||||
|
一、ps命令 ps命令来自英文单词“process”的缩写,中文译为“进程”,其功能是用于显示当前系统的进程状态。使用ps命令可以查看到进程的所有信息,例如进程的号码、发起者、系统资源使用占比(处理器与内存)、运行状态等等。帮助我们及时地发现哪些进程出现“僵死”或“不可中断”等异常情况。经常会与kill命令搭配使用来中断和删除不必要的服务进程,避免服务器的资源浪费。 ps命令: ps [options] [--help] ·
ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义 ·
-A 列出所有的进程 ·
-w 显示加宽可以显示较多的资讯 ·
-au 显示较详细的资讯 ·
-aux 显示所有包含其他使用者的进程 ·
au(x) 输出格式 : USER PID %CPU %MEM VSZ RSS TTY STAT START TIME
COMMAND o USER: 行程拥有者 o PID: pid o %CPU: 占用的 CPU 使用率 o %MEM: 占用的记忆体使用率 o VSZ: 占用的虚拟记忆体大小 o RSS: 占用的记忆体大小 o TTY: 终端的次要装置号码 (minor device number of tty) o STAT: 该行程的状态: §
D: 无法中断的休眠状态 (通常 IO 的进程) §
R: 正在执行中 §
S: 静止状态 §
T: 暂停执行 §
Z: 不存在但暂时无法消除 §
W: 没有足够的记忆体分页可分配 §
<: 高优先序的行程 §
N: 低优先序的行程 §
L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O) o START: 行程开始时间 o TIME: 执行的时间 o COMMAND:所执行的指令
二、进程的状态 从操作系统宏观的概念上讲,进程有三种状态:就绪态、运行态和阻塞态,进程初始化完成后进入就绪态,然后操作系统就会从就绪的进程中调度进程给CPU执行,在CPU中运行的进程就处于运行态,当时间片完后又会变成就绪态在运行队列里面等待CPU下次调度;如果在运行中的进程需要某种外设或某些资源但是无法满足时(比如发起IO请求),处于运行态的进程就会进入阻塞态,等到运行条件满足以后,变为就绪态等待系统调用。 在Linux系统中,进程的状态有六种:R,S,D,T,X,Z: 1. 进程的状态信息在task_struct(PCB)里面。 2. 进程状态的意义:方便OS快速判断进程的状态,完成特定的功能,比如调度,本质是一种分类。 R状态 R运行状态(running): 并不意味着进程一定在运行中(并不一定在使用CPU),它表明进程要么是在运行中要么在运行队列里。 让进程一直运行,通过ps指令查看当前进程的状态是R+,也就是运行状态(+表示处于前台的进程,如果我们想在后台运行进程./test6 &,这样在运行的时候加一个&即表示在后台) S/D状态 当我们完成某种任务的时候,任务条件不具备,需要进程进行某种等待,S/D。 S睡眠状态(sleeping): 意味着进程在等待事件完成(这里的睡眠有时候也叫做可中断睡眠(interruptible sleep),也就是可以随时被终止,接收中断信号,是一种浅度睡眠,比如调用sleep函数,可以随时被终止)。 D磁盘休眠状态(Disk sleep)有时候也叫不可中断睡眠状态(uninterruptible sleep),在这个状态的进程通常会等待IO的结束。(是一种深度睡眠,比如往磁盘中写数据,不可以随便终止进程,进程需要接受磁盘返回的信息)。 进程等待用户输入的时候,会进入S状态。 D状态 D状态是一种不可中断的睡眠状态。比如一个进程让磁盘你帮我写1G数据到磁盘里面去,磁盘开始忙了,进程就会进入D状态等待磁盘写入完成(因为这种等待状态是不允许被中断的,因为如果中断进程的等待,磁盘写入数据完成后,无法向原来的进程返回错误/正确信息,会导致一些问题)。 D状态就是深度睡眠,处于这种状态的进程不能被中断的(不可以被杀掉)。 进程在内核中某些不能被信号打断,例如对某些硬件设备进行操作时刻(等待磁盘Io,等待网络io等等)。 进程处于D状态一般情况下很短暂,不应该被top或者ps看到。 如果进程在top和ps看到长期处于D状态,那么可能进程在等待IO时出现了问题导致进程一直等待不到IO资源,此时如果要处理掉这个D进程,那么只能重启整个系统才会恢复。因为此时整个进程无法被kill 掉。 T状态 T停止状态(stopped): 可以通过发送 SIGSTOP 信号给进程来停止(T)进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。 处于S状态的进程里面的数据可能会被更新,然后唤醒,处于T状态的进程是一种暂停状态,是彻底暂停了,也不会对其里面的一些数据进程更新。 X状态 X死亡状态(dead):这个状态只是一个返回状态,你不会在任务列表里看到这个状态。表示进程彻底结束了,可以回收进程资源了(相关的数据结构+代码和数据),变成X状态后,这个进程几乎瞬间就会被清理掉,所以很难捕捉到处于这个状态下的进程。 Z状态 Z僵尸状态(zombie):表示一个进程即将死亡的状态,此时可以保存进程退出的信息(比如进程为什么要退出),保存在task_struct里面。 所以当一个要进程退出的时候,会先进入Z僵尸状态,将进程的退出信息保存在task_struct里面,供父进程或者操作系统读取该信息,之后才会进入X死亡状态。 僵死状态(Zombies)是一个比较特殊的状态。当进程退出并且父进程(使用wait()系统调用读取)没有读取到子进程退出的返回代码时,子进程就是僵尸进程(处于僵尸状态)。 僵死进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码。 所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入Z状态。 处于僵尸状态的进程叫做僵尸进程。 【参考链接:https://www.linuxcool.com/ps】 【原文链接:https://blog.csdn.net/qq_24016309/article/details/127632218】 |
|||||||
|
遗留问题 |
|||||||
|
Linux程序与进程 |
|||||||
|
明日计划 |
|||||||
|
继续深入学习 |
|||||||