鸟哥的Linux私房菜读书笔记--进程管理

版权声明:本文属博主原创,转载请联系QQ528055624 https://blog.csdn.net/qq_41825534/article/details/83215462

1、进程的观察

<1>ps:将某个时间点的进程运作情况 截取下来

[root@study ~]# ps aux <==观察系统所有的进程数据,注意前面没有-号。
[root@study ~]# ps -lA <==也是能够观察所有系统的数据
[root@study ~]# ps axjf <==连同部分进程树状态
选项与参数:
-A :所有的 process 均显示出来,与 -e 具有同样的效用;
-a :不与 terminal 有关的所有 process ;
-u :有效使用者 (effective user) 相关的 process ;
x :通常与 a 这个参数一起使用,可列出较完整信息。
输出格式规划:
l :较长、较详细的将该 PID 的的信息列出;
j :工作的格式 (jobs format)
-f :做一个更为完整的输出。

(1)仅观察自己的bash相关进程:ps -l

§ F:代表这个进程旗标 (process flags),说明这个进程的总结权限,常见号码有:
        § 若为 4 表示此进程的权限为 root ;
        § 若为 1 则表示此子进程仅进行复制(fork)而没有实际执行(exec)。
§ S:代表这个进程的状态 (STAT),主要的状态有:
        § R (Running):该程序正在运作中;
        § S (Sleep):该程序目前正在睡眠状态(idle),但可以被唤醒(signal)。
        § D :不可被唤醒的睡眠状态,通常这支程序可能在等待 I/O 的情况(ex>打印)
        § T :停止状态(stop),可能是在工作控制(背景暂停)或除错 (traced) 状态;
        § Z (Zombie):僵尸状态,进程已经终止但却无法被移除至内存外。
§ UID/PID/PPID:代表『此进程被该 UID 所拥有/进程的 PID 号码/此进程的父进程 PID 号码』
§ C:代表 CPU 使用率,单位为百分比;
§ PRI/NI:Priority/Nice 的缩写,代表此进程被 CPU 所执行的优先级,数值越小代表该进程越快被 CPU 执行。详细的 PRI 与                       NI将在下一小节说明。
§ ADDR/SZ/WCHAN:都与内存有关,ADDR 是 kernel function,指出该进程在内存的哪个部分,如果是个running 的进程,一                                       般就会显示『 - 』 / SZ 代表此进程用掉多少内存 / WCHAN 表示目前进程是否运作中,同样的, 若为 -                                         表示正在运作中。
§ TTY:登入者的终端机位置,若为远程登录则使用动态终端接口 (pts/n);
§ TIME:使用掉的 CPU 时间,注意,是此进程实际花费 CPU 运作的时间,而不是系统时间;
§ CMD:就是 command 的缩写,造成此进程的触发程序之指令为何。
所以你看到的 ps -l 输出讯息中,他说明的是:『bash 的程序属于 UID 为 0 的使用者,状态为睡眠 (sleep), 之所以为睡眠因为他触发了 ps (状态为 run) 之故。此进程的 PID 为 14836,优先执行顺序为 80 , 下达 bash 所取得的终端接口为 pts/0 ,运作状态为等待 (wait) 。』

(2)观察系统所有进程:ps aux

§ USER:该 process 属于那个使用者账号的?
§ PID :该 process 的进程标识符。
§ %CPU:该 process 使用掉的 CPU 资源百分比;
§ %MEM:该 process 所占用的物理内存百分比;
§ VSZ :该 process 使用掉的虚拟内存量 (Kbytes)
§ RSS :该 process 占用的固定的内存量 (Kbytes)
§ TTY :该 process 是在那个终端机上面运作,若与终端机无关则显示 ?,另外, tty1-tty6 是本机上面的登入者进程,若                           为 pts/0 等等的,则表示为由网络连接进主机的进程。
§ STAT:该进程目前的状态,状态显示与 ps -l 的 S 旗标相同 (R/S/T/Z)
§ START:该 process 被触发启动的时间;
§ TIME :该 process 实际使用 CPU 运作的时间。
§ COMMAND:该进程的实际指令为何?

僵尸进程:进程应该已经执行完毕,或者因故应该要终止了,但该进程的父进程无法完整的将该进程结束掉,造成该进程一直在内存中,如果某进程的后面还接有<defunct>就表示其为僵尸进程

<2>top:动态观察进程的变化

扫描二维码关注公众号,回复: 3752729 查看本文章

root@study ~]# top [-d 数字] | top [-bnp]
选项与参数:
-d :后面可以接秒数,就是整个进程画面更新的秒数。预设是 5 秒;
-b :以批次的方式执行 top ,还有更多的参数可以使用喔!通常会搭配数据流重导向来将批次的结果输出成为文件。
-n :与 -b 搭配,意义是,需要进行几次 top 的输出结果。
-p :指定某些个 PID 来进行观察监测而已。
在 top 执行过程当中可以使用的按键指令:
? :显示在 top 当中可以输入的按键指令;
P :以 CPU 的使用资源排序显示;
M :以 Memory 的使用资源排序显示;
N :以 PID 来排序喔!
T :由该 Process 使用的 CPU 时间累积 (TIME+) 排序。
k :给予某个 PID 一个讯号 (signal)
r :给予某个 PID 重新制订一个 nice 值。
q :离开 top 软件的按键。

· 第一行(top...):这一行显示的信息分别为:
                          o 目前的时间,亦即是 00:53:59 那个项目;
                          o 开机到目前为止所经过的时间,亦即是 up 6:07, 那个项目;
                          o 已经登入系统的用户人数,亦即是 3 users, 项目;
                          o 系统在 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 使用时间的累加;

范例三:我们自己的 bash PID 可由 $$ 变量取得,请使用 top 持续观察该 PID
[root@study ~]# echo $$
14836 <==就是这个数字!他是我们 bash 的 PID
[root@study ~]# top -d 2 -p 14836

<3>pstree    #查看各进程间的相关性

选项与参数:
-A :各进程树之间的连接以 ASCII 字符来连接;
-U :各进程树之间的连接以万国码的字符来连接。在某些终端接口下可能会有错误;
-p :并同时列出每个 process 的 PID;
-u :并同时列出每个 process 的所属账号名称。

2、进程的管理

代号 名称 内容
1 SIGHUP 启动被终止的进程,可让该 PID 重新读取自己的配置文件,类似重新启动
2 SIGINT 相当于用键盘输入 [ctrl]-c 来中断一个进程的进行
9 SIGKILL 代表强制中断一个进程的进行,如果该进程进行到一半, 那么尚未完成的部分可能会有『半产品』产生,类似 vim 会有 .filename.swp 保留下来。
15 SIGTERM 以正常的结束进程来终止该进程。由于是正常的终止, 所以后续的动作会将他完成。不过,如果该进程已经发生问题,就是无法使用正常的方法终止时, 输入这个 signal 也是没有用的。
19 SIGSTOP 相当于用键盘输入 [ctrl]-z 来暂停一个进程的进行

<1>kill -singal PID

kill可以将signal传送给某个工作(%/numberr)或者某个PID。kill后面直接加数字与加上%+数字的情况是不一样的,%是专门用于工作控制的

<2>killall -sinagal  指令名称

[root@study ~]# killall [-iIe] [command name]
选项与参数:
-i :interactive 的意思,交互式的,若需要删除时,会出现提示字符给用户;
-e :exact 的意思,表示『后面接的 command name 要一致』,但整个完整的指令不能超过 15 个字符。
-I :指令名称(可能含参数)忽略大小写。
范例一:给予 rsyslogd 这个指令启动的 PID 一个 SIGHUP 的讯号
[root@study ~]# killall -1 rsyslogd
# 如果用 ps aux 仔细看一下,若包含所有参数,则 /usr/sbin/rsyslogd -n 才是最完整的!
范例二:强制终止所有以 httpd 启动的进程 (其实并没有此进程在系统内)
[root@study ~]# killall -9 httpd

3、关于进程的执行顺序

<1>priority与nice值

优先执行顺序(priority,PRI),PRI值越小越优先,PRI值是由核心动态调整的,用户无法直接调整PRI值,如果想要调整进程的优先执行顺序,就需要透过nice值进行调整,即NI值。

PRI(new)=PRI(old)+nice
注意:· nice 值可调整的范围为 -20 ~ 19 ;
· root 可随意调整自己或他人进程的 Nice 值,且范围为 -20 ~ 19 ;
· 一般使用者仅可调整自己进程的 Nice 值,且范围仅为 0 ~ 19 (避免一般用户抢占系统资源);
· 一般使用者仅可将 nice 值越调越高,例如本来 nice 为 5 ,则未来仅能调整到大于 5;
给予一个进程nice值的方法:
· 一开始执行程序就立即给予一个特定的 nice 值:用 nice 指令;
· 调整某个已经存在的 PID 的 nice 值:用 renice 指令。

<2>nice:新执行的指令即给予新的nice值

[root@study ~]# nice [-n 数字] command
选项与参数:    -n :后面接一个数值,数值的范围 -20 ~ 19

<3>renice :已存在进程的 nice 重新调整
[root@study ~]# renice [number] PID
选项与参数:  PID :某个进程的 ID 啊!

4、系统资源的观察

<1>free:观察内存使用情况

[root@study ~]# free [-b|-k|-m|-g|-h] [-t] [-s N -c N]
选项与参数:
-b :直接输入 free 时,显示的单位是 Kbytes,我们可以使用 b(bytes), m(Mbytes)
 k(Kbytes), 及 g(Gbytes) 来显示单位喔!也可以直接让系统自己指定单位 (-h)
-t :在输出的最终结果,显示物理内存与 swap 的总量。
-s :可以让系统每几秒钟输出一次,不间断的一直输出的意思!对于系统观察挺有效!
-c :与 -s 同时处理~让 free 列出几次的意思~

<2>uname:查阅系统与核心相关信息

[root@study ~]# uname [-asrmpi]
选项与参数:
-a :所有系统相关的信息,包括底下的数据都会被列出来;
-s :系统核心名称
-r :核心的版本
-m :本系统的硬件名称,例如 i686 或 x86_64 等;
-p :CPU 的类型,与 -m 类似,只是显示的是 CPU 的类型!
-i :硬件的平台 (ix86)

<3>uptime:观察系统启动时间与工作负载

命令:  $  uptiem

<4>netstat:追踪网络与插槽文件    #用于网络的监控方面

[root@study ~]# netstat -[atunlp]
选项与参数:
-a :将目前系统上所有的联机、监听、Socket 数据都列出来
-t :列出 tcp 网络封包的数据
-u :列出 udp 网络封包的数据
-n :不以进程的服务名称,以埠号 (port number) 来显示;
-l :列出目前正在网络监听 (listen) 的服务;
-p :列出该网络服务的进程 PID

· Proto :网络的封包协议,主要分为 TCP 与 UDP 封包,相关资料请参考服务器篇;
· Recv-Q:非由用户程序链接到此 socket 的复制的总 bytes 数;
· Send-Q:非由远程主机传送过来的 acknowledged 总 bytes 数;
· Local Address :本地端的 IP:port 情况
· Foreign Address:远程主机的 IP:port 情况
· State :联机状态,主要有建立(ESTABLISED)及监听(LISTEN);

对于插槽档(socket file)文件的输出字段有:

· Proto :一般就是 unix 啦;
· RefCnt:连接到此 socket 的进程数量;
· Flags :联机的旗标;
· Type :socket 存取的类型。主要有确认联机的 STREAM 与不需确认的 DGRAM 两种;
· State :若为 CONNECTED 表示多个进程之间已经联机建立。
· Path :连接到此 socket 的相关程序的路径!或者是相关数据输出的路径。

<5>dmesg:分析核心产生的讯息

命令:$  demsg | more    #输出所有的核心开机时的信息

命令:$  demsg | grep -i vda    #搜索开机时硬盘的相关信息

<6>vmstat:侦测系统资源变化

[root@study ~]# vmstat [-a] [延迟 [总计侦测次数]] <==CPU/内存等信息
[root@study ~]# vmstat [-fs] <==内存相关
[root@study ~]# vmstat [-S 单位] <==设定显示数据的单位
[root@study ~]# vmstat [-d] <==与磁盘有关
[root@study ~]# vmstat [-p 分区槽] <==与磁盘有关
选项与参数:
-a :使用 inactive/active(活跃与否) 取代 buffer/cache 的内存输出信息;
-f :开机到目前为止,系统复制 (fork) 的进程数;
-s :将一些事件 (开机至目前为止) 导致的内存变化情况列表说明;
-S :后面可以接单位,让显示的数据有单位。例如 K/M 取代 bytes 的容量;
-d :列出磁盘的读写总量统计表
-p :后面列出分区槽,可显示该分区槽的读写总量统计表

· 进程字段 (procs) 的项目分别为:
r :等待运作中的进程数量;b:不可被唤醒的进程数量。这两个项目越多,代表系统越忙碌 (因为系统太忙,所以很多进程就无法被执行或一直在等待而无法被唤醒之故)。
· 内存字段 (memory) 项目分别为:
swpd:虚拟内存被使用的容量; free:未被使用的内存容量; buff:用于缓冲存储器; cache:用于高速缓存。 这部份则与 free 是相同的。
· 内存置换空间 (swap) 的项目分别为:
si:由磁盘中将进程取出的量;so:由于内存不足而将没用到的进程写入到磁盘的 swap 的容量。如果 si/so 的数值太大,表示内存内的数据常常得在磁盘与主存储器之间传来传去,系统效能会很差!
· 磁盘读写 (io) 的项目分别为:
bi:由磁盘读入的区块数量; bo:写入到磁盘去的区块数量。如果这部份的值越高,代表系统的 I/O 非常忙碌!
· 系统 (system) 的项目分别为:
in:每秒被中断的进程次数; cs:每秒钟进行的事件切换次数;这两个数值越大,代表系统与接口设备的沟通非常频繁! 这些接口设备当然包括磁盘、网络卡、时间钟等。
· CPU 的项目分别为:
us:非核心层的 CPU 使用状态; sy:核心层所使用的 CPU 状态; id:闲置的状态; wa:等待 I/O 所耗费的 CPU 状态; st:被虚拟机 (virtual machine) 所盗用的 CPU 使用状态 (2.6.11 以后才支持)。

猜你喜欢

转载自blog.csdn.net/qq_41825534/article/details/83215462