Linux 之 进程管理 -- 进程观察

学习进程管理的原因(~就是要学会解决下面的👇问题啊~)

  • 在当整个系统资源快要被使用光时,能够找出最耗系统的那个进程,然后删除该进程,让系统恢复正常。
  • 此外,如果由于某个程序写的不好,导致产生一个有问题的进程在内存中,你又如何找出他,然后将他移除?
  • 如何同时有五六项任务在系统当中运作,但其中只有一项任务才是最重要的,该如何让那一项重要的任务被最优先执行呢?

发现问题是解决问题的第一步~通过 进程观察 来寻找问题~
原本是想要把进程观察和进程管理写在一起,但是内容有点多,本着偷懒原则,一篇文章可以分两篇来发,何乐不为?

这篇文章主要通过3个方向来观察和寻找问题:
一、ps撷取和观察 某个时间点 的进程运作情况;
二、top持续 侦测进程运作 的状态;
三、pstree查找进程相关性(查找父进程)

1. ps 将某个时间点的进程运作情况撷取下来

这里只记两个常用的ps指令 ps -lps aux

1.1 ps -l 仅观察自己的bash相关进程

通过ps -l我们可以获取哪些信息呢?还是借用鸟哥的图

ps -l 仅观察自己的bash相关进程

这串串密密麻麻的字母和数字是什么意思呢?
解释一下图中 ps -l 的第三行:
bash的程序属于UID为0的使用者,状态为睡眠(sleep),之所以为睡眠是因为他触发了ps(状态为run)的原因。此进程的PID为14836,优先执行顺序为80,下达bash所取得的终端接口为pts/0,运作状态为等待(wait)

下面就依据👆图片,从左到右的顺序,啰嗦一下吧

  • F(process flags)代表进程旗标
    说明这个进程的总权限,常见的号码含义:
    -- 若为4 表示此进程的权限为root
    -- 若为1则表示此进程仅进行复制(fork)而没有实际执行(exec)
    -- 若为其他数字,既不是fork之后未执行的进程,也不是使用的超级用户权限
  • S (STAT)代表这个进程的状态
    主要的状态有
    -- R(running): 该程序正在运作中
    -- S(Sleep): 该程序目前正在睡眠状态(idle),但可以被唤醒(signal)
    -- D: 不可被唤醒的睡眠状态,通常这支程序可能在等待I/O的情况(I/O是电脑的接口,I/O接口的功能是负责实现CPU通过系统总线把I/O电路和 外围设备联系在一起)
    -- T: 停止状态(stop),可能是在工作控制(背景暂停)或除错(traced)状态
    -- Z(Zombie): 僵尸状态,进程已经终止但无法被移除至内存外
  • UID/PID/PPID
    代表此进程被该UID所拥有/进程的PID号码/此进程的父进程PID号码
  • C:代表CPU使用率,单位为百分比
  • PRI/NI(Priority/Nice)
    代表此进程被CPU所执行的优先级,数值越小代表该进程越快被CPU执行
  • ADDR/SZ/WCHAN (都与内存有关)
    -- ADDR(kernel function) 指出该进程在内存的哪个部分,如果是running的进程,一般 就会显示-
    -- SZ 代表此进程用掉多少内存
    -- WCHAN 表示目前进程是否运作中,-表示正在运作中
  • TTY
    登入者的终端机位置,若为远程登陆则使用动态终端接口(pts/n)
  • TIME
    使用掉的CPU时间,注意,是进程实际花费CPU运作的时间,不是系统时间
  • CMD
    就是command的缩写,即造成此进程的触发程序的指令

1.2 ps aux观察系统所有的进程

ps aux 观察系统所有进程-1

ps aux 观察系统所有进程-2

ps -l 和 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 该进程额实际指令为何
    一般来说,ps aux会依照PID的顺序来排序显示,我们选择其中PID 14836来解释:root 执行的 bash PID 为14836,占用了0.1%的内存容量百分比,状态为休眠(S),该进程启动的时间为8月4号,因为启动太久了,所以没有列出实际的时间点。且取得的终端机环境为pts/1。

1.3 简单认识ps的其他操作 ps -lAps axjf

这里小小解释一下,ps -lAps -l的输出形式相同,都是F、S、UID、PID等等依次向右排开的,但是ps -lA明显信息量比ps -l多好多,因为 ps -lA显示的是系统所有的进程。(ps -l仅显示自己bash相关进程)

ps -lA 和 ps axjf

ps axjf 形成了一个进程树,各进程之间的关系更加直观了(其实和pstree的功能类似,下面第3部分会详细提到)。

这里插入一个小知识点😁~
僵尸进程
通常,造成僵尸进程的成因是因为该进程应该已经执行完毕,或者是因故应该要终止了。但是该进程个的父进程却无法完整的将该进程结束掉,而造成那个进程一直存在内存当中。如果你发现在某个进程的CMD后面还接上<defunct>时,就代表该进程是僵尸进程。

看看 僵尸进程 长什么样子

僵尸进程的出现是因为程序写的不好或者使用者的操作习惯不良等等造成的。当发现系统中有很多僵尸进程时,记得找出该进程的父进程,然后追踪,最后好好的进行主机的环境优化。(有时需要透过reboot的方式来将僵尸进程抹去,reboot是啥?-- 重启计算机~)

2 top 动态观察进程的变化

topps对比着理解:ps是撷取一个时间点的进程状态,top则可以持续侦测进程运作的状态

2.1 top的工作模式

工作模式: top [-d 数字] | top [-bnp]

  • -d 后面可以接秒数,就是整个进程画面更新的秒数,预设是5秒
  • -b 以批次的方式执行top,通常会搭配数据流重导向来将批次的结果输出成为文件
  • -n-b 搭配,即需要进行几次top的输出结果
    (eg:top -b -n 2 > /tmp/top.txttop信息进行两次,结果输出到/tmp/top.txt)
  • -p 指定某些个PID来进行观察监测而已

使用了top之后,一直有数据霸占着屏幕,你将看不到命令行了。
有必要了解以下几个按键指令:

在top执行过程中可以使用的按键指令
:显示在top当中可以输入的按键指令
P:以CPU使用的资源排序显示
M:以Memory 的使用资源排序显示
N:以PID来排序
T:由该Process使用的CPU时间累积(TIME+)排序
k:给予某个PID一个讯号(signal)
r:给予某个PID重新制定一个nice值
q:离开top软件的按键

top也可以用来查看自己本机的运行状态,windows可以用putty,MAC可以用terminal,在命令行中输入top...

2.2 认识top提供的信息

下面👇是top动态观察进程变化的截图(来自鸟哥)


top 动态观察进程的变化

top主要分为两个画面:上面6行为整个系统的资源使用状态;下面是每个process使用资源情况

(1) top画面之 系统资源使用状态

上面的画面为整个系统的资源使用状态,基本上总共有六行,显示的内容依次是:

  • 第一行 (top):开机时间;已经登入系统的用户人数;系统的平均工作负载
    目前的时间 :开机到目前为止所经过的时间(6:07 六小时零七分钟);
    已经登入系统的用户人数:(3 users)
    load average:系统在1,5,15分钟的平均工作负载(系统平均要负责运作几个进程的意思),数值越小表示系统越闲置,若高于1就要注意你的系统进程是否太过繁复了(CPU的工作负载越大,就代表着,CPU在不同的工作之间进行工作切换越频繁,从而系统越忙碌)
  • 第二行(Tasks):显示的是目前进程的总量与个别进程在什么状态
    (running,sleeping,stopped,zombie),需要注意的是zombie的数值,如果不是0,就要好好看看是哪个process变成僵尸了。
  • 第三行(%Cpus):显示的是CPU的整体负载,每个项目可使用查阅。
    需要注意的是wa项目,它代表的是I/O wait,通常系统变慢都是I/O产生的问题比较大。如果是多核心的设备,可以按下数字键‘1'来切换成不同CPU的负载率
  • 第四行与第五行:表示目前的物理内存与虚拟内存(Mem/Swap)的使用情况。
    需要注意的是,swap的使用量要尽量的少,如果swap被使用的很大量,表示系统的物理内存实在不足。
  • 第六行:当top程序中输入指令时,显示状态的地方
(2) top画面之 process使用的资源情况

top 下半部分的画面

  • PID 每个process的ID
  • USER 该process所属的使用者
  • PR Priority 的缩写,进程的优先执行顺序,越小越早被执行
  • NI Nice 的简写,与Priority有关,也是越小越早被执行
  • %CPU CPU的使用率
  • %MEM 内存的使用率
  • TIME+ CPU使用时间的累加

top预设使用CPU使用率(%CPU)作为排序的重点

  • 按指令键 M 使用内存(%MEM)使用率排序,
  • 按指令键 P 恢复最初的排序
  • 按指令键 Q 离开top

2.3 通过top仅观察一个已知ID的进程

前面我们知道,top预设是使用CPU使用率作为排序的重点,如果我想要查看的进程CPU使用率不高,排在后面不方便查看怎么办?就可以通过这种方式查看指定的进程。(前提是你要知道进程的PID是啥)

我们以自己登入系统的bash为例吧👇
首先通过echo $$ 获得自己bash的PID,再通过top -d -p 14836查看

top观察自己登入系统的bash进程-1

top观察自己登入系统的bash进程-2

~更改NI的小插曲~
从上面我们可以看到 PID为14836的这支进程NI为0,我想要更改为10怎么办?

  • 1.在top画面中直接按下r键,top上画面的第六行就会如此显示PID to renice [default pid = 14836]
  • 2.直接输入你要更改的PID号码 14836,第六行显示:Renice PID 14836 to value
  • 3.最后输入10就可以了


    更改NI后的图

3 pstree查找进程之间的相关性

直接在命令行中输入pstree便可以查到进程相关性,还会使用线段将相关性进程连结起来。不过为了能够让进程树更清晰易懂,还是要加上参数~

工作模式 pstree [-AIU] [-up]

  • - A :各进程树之间的连接以ASCII字符来连结
  • - U:各进程树之间的连接以万国码的字符来连接。在某些终端接口下可能会有错误
  • -p:并同时列出每个process的PID
  • -u:并同时列出每个process的所属账号名称
  • pstree -A
    为了防止语系问题造成乱码问题,经常加上 -A 选项来克服此类线段乱码问题。
  • pstree -Aup
    如果还想知道PID与所属使用者,加上-u及-p两个参数即可(帮助寻找父进程)
    pstree -A 与 pstree -Aup
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • 一个程序被加载到内存当中运行,那么在内存内的那个数据就被称为进程(process)。进程是操作系统上非常重要的概念...
    Zhang21阅读 1,905评论 0 12
  • 技术交流QQ群:1027579432,欢迎你的加入! 一、进程的查看 不管在测试的时候、在实际的生产环境中,还是自...
    CurryCoder阅读 597评论 0 1
  • Linux进程管理原理 Linux的进程管理,就是对硬件各资源进行分配、调度、销毁等工作,其主要部件的管理为:CP...
    魏镇坪阅读 1,191评论 0 6
  • 又来到了一个老生常谈的问题,应用层软件开发的程序员要不要了解和深入学习操作系统呢? 今天就这个问题开始,来谈谈操...
    tangsl阅读 4,077评论 0 23
  • 一点畅快,自己的感悟被回复被分享; 一丝欢喜,自己的新想法被认同被推崇; 一缕感怀,自己的小性子被理解被包容; 一...
    若浔wfsindy阅读 300评论 8 1