取某一个时间点的进程状态ps指令
ps的指令是有很多的,可直接背两个比较不同的选项
- 一个是只能查阅自己 bash进程的【 ps -l 】
- 一个则是可以查阅所有系统运作的进程【 ps aux 】注意,你没看错,中间没有那个减号(-)
执行【 ps -l 】命令:
- F:代表这个进程旗标(process flags),说明这个进程的总结权限,常见号码有:
-
若为4表示此进程的权限为root ;
-
若为1则表示此子进程仅进行复制(fork)而没有实际执行(exec)。
- S:代表这个进程的状态(STAT),主要的状态有:
- R (Running):该程序正在运作中;
- S(Sleep):该程序目前正在睡眠状态(idle),但可以被唤醒(signal)。
- D:不可被唤醒的睡眠状态,通常这支程序可能在等待IO的情况(ex>打印)
- T :停止状态(stop),可能是在工作控制(背景暂停)或除错(traced)状态;
- Z(Zombie):僵尸状态,进程已经终止但却无法被移除至内存外。
-
UID/PID/PPID:代表『此进程被该UID所拥有/进程的PID号码/此进程的父进程PID号码』
-
C:代表CPU 使用率,单位为百分比;
-
PRI/NI: Priority/Nice 的缩写,代表此进程被CPU所执行的优先级,数值越小代表该进程越快被CPU执行。详细的PRI与NI将说明【PRI(new)=PRI(old)+ nice】。
-
ADDR/SZ/WCHAN:都与内存有关,ADDR是 kernel function,指出该进程在内存的哪个部分,如果是个running 的进程,一般就会显示『-」/SZ 代表此进程用掉多少内存/WCHAN表示目前进程是否运作中,同样的,若为–表示正在运作中。
-
TTY:登入者的终端机位置,若为远程登录则使用动态终端接口(pts/n);
-
TIME:使用掉的CPU时间,注意,是此进程实际花费CPU运作的时间,而不是系统时间;
-
CMD:就是 command 的缩写,造成此进程的触发程序之指令为何。
执行【 ps aux】命令:
对比两个命令发现 ps-l 与ps aux显示的项目名称并不相同在。ps aux显示的项目中,各字段的意义为:
- USER:该process 属于那个使用者账号的;
- PID :该process的进程标识符。
- CPU:该process使用掉的CPU资源百分比;
- %MEM:该process所占用的物理内存百分比;
- VSZ :该process使用掉的虚拟内存量(Kbytes)
- RSS :该process占用的固定的内存量(Kbytes )
- TTY:该process是在那个终端机上面运作,若与终端机无关则显示?,另外,t ty1-tty6是本机上面的登入者进程,若为pts/0 等等的,则表示为由网络连接进主机的进程。
- STAT:该进程目前的状态,状态显示与 ps -l 的S旗标相同 (R/S/T/Z)
- START:该process被触发启动的时间;
- TIME :该process实际使用CPU运作的时间。
- COMMAND:该进程的实际指令为何?
动态的显示进程状态top指令
top指令描述:
下面是每6秒钟动态显示进程状态:
top指令的上部分:
- 第一行(top…):这一行显示的信息分别为:
- 目前的时间,亦即是 10:45:14那个项目;
- 开机到目前为止所经过的时间,亦即是up 6:07,那个项目;
- 已经登入系统的用户人数,亦即是 1 users,项目;
- 系统在 1,5,15分钟的平均工作负载。batch工作方式为负载小于0.8就是这个负载啰!代表的是 1,5,15分钟,系统平均要负责运作几个进程(工作)的意思。越小代表系统越闲置,若高于1得要注意你的系统进程是否太过繁复了!
-
第二行(Tasks…):显示的是目前进程的总量与个别进程在什么状态(running, sleeping, stopped, zombie)。比较需要注意的是最后的 zombie那个数值,如果不是0,好好看看到底是哪个process变成僵尸了吧?
-
第三行(%Cpus…):显示的是CPU的整体负载,每个项目可使用?查阅。需要特别注意的是 wa项目,那个项目代表的是 I/O wait,通常你的系统会变慢都是I/O产生的问题比较大!因此这里得要注意这个项目耗用CPU的资源喔!另外,如果是多核心的设备,可以按下数字键『1』来切换成不同CPU的负载率
-
第四行与第五行:表示目前的物理内存与虚拟内存(Mem/Swap)的使用情况。再次重申,要注意的是swap的使用量要尽量的少!如果 swap被用的很大量,表示系统的物理内存实在不足!
-
第六行:这个是当在 top程序当中输入指令时,显示状态的地方。
top指令的下部分:
是每个process 使用的资源情况。比较需要注意的是:
- PID :每个process 的ID
- USER:该process所属的使用者;
- PR: Priority 的简写,进程的优先执行顺序,越小越早被执行;
- NI : Nice 的简写,与 Priority有关,也是越小越早被执行;
- %CPU:CPU的使用率;
- %MEM:内存的使用率;
- TIME+:CPU使用时间的累加;
查找进程的相关性pstree指令
[ tudy ~]# pstree [-AIU][-up]
选项与参数:
-A:各进程树之间的连接以ASCII字符来连接;
-U:各进程树之间的连接以万国码的字符来连接。在某些终端接口下可能会有错误;
-p:并同时列出每个process的 PID;
-u:并同时列出每个process的所属账号名称。
使用线段将相关性进程连接起来:
- 在括号()内的即是PID以及该进程的 owner 。一般来说,如果该进程的所有人与父进程同,就不会列出,但是如果与父进程不一样,那就会列出该进程的拥有者!看上面1211就转变成app_admin了
PRI与NI将说明
PRI(new)=PRI(old)+ nice
- nice值可调整的范围为-20~~19 ;
- root可随意调整自己或他人进程的Nice值,且范围为-20~19 ;
- 一般使用者仅可调整自己进程的Nice值,且范围仅为0~19(避免一般用户抢占系统资源);
- 一般使用者仅可将nice值越调越高,例如本来 nice为5,则未来仅能调整到大于5;
这也就是说,要调整某个进程的优先执行序,就是『调整该进程的nice值』那么如何给予某个进程nice值呢?
调整进程的优先执行序有两种方式,分别是:
- 一开始执行程序就立即给予一个特定的nice值:用nice指令;
[ root@study ~]# nice [-n数字]command选项与参数:
[ root@study ~]# nice [-n数字]command选项与参数:
-n:后面接一个数值,数值的范围-20 ~19。
范例一:用root 给一个nice值为-5,用于执行vim ,并观察该进程!
[ root@study ~]# nice -n -5 vim &
[1]19865
[ root@study ~]# ps -1
#因此 vim的 PRI降低了,RPI与NI各减5,但不一定每次都是正好相同喔!因为核心会动态调整
- 调整某个已经存在的PID的nice值:用renice指令。
[ root@study ~]#renice [number] PID
选项与参数:
PID:某个进程的ID啊!
整个nice值是可以在父进程–>子进程之间传递的呢!另外,除了renice 之外,其实那个top同样的也是可以调整nice值的!
kill杀死进程
使用kill -l 命令可以看到命令信号signal值含义
常用的有三个
- 1(SIGHUP):启动被终止的进程,可让该PID重新读取自己的配置文件,类似重新启动。
- 9(SIGKILL):强制杀死该进程,与15相比这个信号不能被捕获或忽略,如果进程执行到一半,尚未完成的部分可能会产生半成品。
- 15(SIGTERM):正常停止一个进程,以正常的结束进程来终止该进程。由于是正常的终止,所以后续的动作会将他完成。不过,如果该进程已经发生问题,就是无法使用正常的方法终止时,输入这个signal也是没有用的。。
[ root@study ~]# kill -9 PID
选项与参数:
PID:某个进程的ID