Loading... <p>一、简介</p> <p> 在使用Windows操作系统中很多时候需要查看某些程序进程的运行情况,一般来说我们可以打开Windows提供的"任务管理器",然后点击"进程"栏即可查看到当前系统运行的进程列表。例如偶尔出现系统内存、CPU占用过高的时候,我们往往都会查看进程列表,并找到当前占用内存或CPU过高的进程,再把这些占用过高的进程给清理掉,以便释放内存使用率。</p> <p> 在Linux系统中也同样需要及时查看进程运行(内存占用)情况。以便我们轻松的实现系统调整优化(调整占用过高的进程、查看调整nice值等),下面将具体说明相关命令的用法讲解。</p> <p>二、用法详解</p> <p> 1.pstree,查看进程树命令,详情见下图:<img src="//cto.wang/usr/uploads/2016/07/20160703180559-41.png" title="1443920622844199.png" alt="blob.png" /></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703180600-96.png" title="1443921167562122.png" alt="blob.png" /> </p> <p> 2.ps,以静态(快照)方式查看进程状态结果命令。</p> <p> (1)ps命令的BSD风格命令,详情见下图:</p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703180600-3.png" title="1443921370692658.png" alt="blob.png" /><img src="//cto.wang/usr/uploads/2016/07/20160703180600-70.png" title="1443921694559344.png" alt="blob.png" /></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703180601-31.png" title="1443921985523274.png" alt="blob.png" /><img src="//cto.wang/usr/uploads/2016/07/20160703180601-39.png" title="1443922402498401.png" alt="blob.png" /></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703180602-14.png" title="1443924126949344.png" alt="blob.png" /><img src="//cto.wang/usr/uploads/2016/07/20160703180602-71.png" title="1443924279959731.png" alt="blob.png" /></p> <p> (2)ps命令的SysV风格命令,详情见下图:<img src="//cto.wang/usr/uploads/2016/07/20160703180602-83.png" title="1443925407180023.png" alt="blob.png" /></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703180603-55.png" title="1443926406460831.png" alt="blob.png" /><img src="//cto.wang/usr/uploads/2016/07/20160703180604-93.png" title="1443926419857932.png" alt="blob.png" /><img src="//cto.wang/usr/uploads/2016/07/20160703180605-66.png" title="1443926445778540.png" alt="blob.png" /></p> <p> 3.pgrep,过滤显示指定进程命令,语法格式:pgrep [OPTIONS] "PATTERN"</p> <p> -U UID:仅显示以指定用户身份运行的进程;</p> <p> -G GID</p> <p> -l: 显示PID和进程名;</p> <p>例:显示sshd这个进程的进程号,详情见下图:</p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703180605-6.png" title="1443927806343568.png" alt="blob.png" /></p> <p>例:显示root用户所有进程的进程号,详情见下图:<img src="//cto.wang/usr/uploads/2016/07/20160703180605-17.png" title="1443928396750458.png" alt="blob.png" /></p> <p>例:显示属组为root的所有进程的进程号,详情见下图:<img src="//cto.wang/usr/uploads/2016/07/20160703180606-34.png" title="1443928581242244.png" alt="blob.png" /></p> <p>例:显示指定进程的pid和进程名,详情见下图:</p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703180606-10.png" title="1443928698469072.png" alt="blob.png" /></p> <p> 4.pidof,查看指定进程的pid号,语法格式:pidof PROGRAM(给定命令行程序)。详情见下图:<img src="//cto.wang/usr/uploads/2016/07/20160703180606-61.png" title="1443929001416046.png" alt="blob.png" /></p> <p> 5.top,以动态方式查看进程状态结果命令,默认按CPU占有百分比排序,有许多交互式子命令,说明及图片如下:</p> <p> P:以占据的CPU百分比大小排序(每次刷新CPU占用的百分比);</p> <p> M:以占据Memory空间大小排序;</p> <p> T:CPU累积占用时间排序;</p> <p> l: 是否显示系统负载行;队列长度的合理区间:CPU颗数*0.7</p> <p> t: 是否显示进程摘要信息及CPU负载状态;</p> <p><span class="Apple-tab-span"> </span> Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st</p> <p><span class="Apple-tab-span"> </span> us: user space(用户空间的程序所占据的CPU百分比)</p> <p><span class="Apple-tab-span"> </span> sy: system (kernel space:运行内核代码占据的百分比)</p> <p><span class="Apple-tab-span"> </span> ni: nice(优先级,该值的调整影响到的CPU百分比)</p> <p><span class="Apple-tab-span"> </span> id: idle(CPU空闲百分比)</p> <p><span class="Apple-tab-span"> </span> wa: wait io(等待IO完成占据的CPU百分比)</p> <p><span class="Apple-tab-span"> </span> hi: hardware interrupt(处理硬件中断占据的CPU百分比)</p> <p><span class="Apple-tab-span"> </span> si: software interrupt(处理软件中断占据的CPU百分比)</p> <p><span class="Apple-tab-span"> </span> st: stolen, 被虚拟机“偷走”的百分比</p> <p> 1:平均或单独显示CPU的负载状态;</p> <p> m: 是否显示内存相关的状态信息;</p> <p> q: 退出命令</p> <p> s: 修改延迟时长</p> <p> k: 终止指定进程</p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703180606-75.png" title="1443940013260501.png" alt="blob.png" /></p> <p> top命令的选项:</p> <p><span class="Apple-tab-span"></span> -b: batch,批次显示</p> <p><span class="Apple-tab-span"></span> -n #: 显示的批次数量</p> <p><span class="Apple-tab-span"></span> -d #: 指明延迟时长</p> <p></p> <p> 6.uptime,显示当前系统时间,运行时长,登录用户数及系统平均负载,详情见下图:</p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703180607-42.png" title="1443939165328760.png" alt="blob.png" /></p> <p> 7.htop,比top命令功能更强大的以动态方式查看进程状态结果命令,默认也是按照CPU占有百分比排序,安装详情见下图:</p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703180607-76.png" title="1443950567931323.png" alt="blob.png" /> htop也有许多交互式子命令,说明及图片如下:</p> <p> F1-F10:菜单命令;</p> <p> u: 过滤仅显示选定用户的进程;</p> <p><span class="Apple-tab-span"> </span> s: 跟踪选定的进程所发起的系统调用;</p> <p><span class="Apple-tab-span"> </span> l: 显示选定进程所打开的文件;</p> <p><span class="Apple-tab-span"> </span> t(F5): 显示进程的层次结构(此命令与按F5键的效果相同);</p> <p><span class="Apple-tab-span"> </span> a: 设定进程的cpu亲缘性;(将选定的进程绑定在指定的CPU上)</p> <p><img src="/upload/cjy5mesr0ol.png" title="1443951920758983.png" alt="blob.png" /></p> <p> htop命令的选项:</p> <p><span class="Apple-tab-span"> </span> -d #: 延迟时长</p> <p><span class="Apple-tab-span"> </span> -u USERNAME: 仅显示指定用户的进程;</p> <p><span class="Apple-tab-span"> </span> -s COLUMN: 根据指定的字段进行排序;</p> <p> 8.vmstat,查看虚拟内存使用状况,语法格式:vmsate [delay [count]],说明及图片如下:</p> <p> procs:</p> <p> <span class="Apple-tab-span"> </span>r: 等待运行的进程的个数;(队列长度)</p> <p> <span class="Apple-tab-span"> </span>b:处理不可中断睡眠状态的进程的个数;(即IO阻塞队列长度)</p> <p> memory:</p> <p> <span class="Apple-tab-span"> </span>swpd: 交换内存使用量;</p> <p> <span class="Apple-tab-span"> </span>free: 空间的物理内存量;</p> <p> <span class="Apple-tab-span"> </span>buffer: 用于buffer的内存总量;</p> <p> <span class="Apple-tab-span"> </span>cache: 用于cache的内存总量;</p> <p> swap:</p> <p> <span class="Apple-tab-span"> </span>si: 数据进入swap中的速率(kb/s)</p> <p> <span class="Apple-tab-span"> </span>so: 数据离开swap的速率(kb/s) </p> <p> io</p> <p> <span class="Apple-tab-span"> </span>bi: 从块设备读入数据到系统的速率(kb/s)</p> <p> <span class="Apple-tab-span"> </span>bo: 保存数据至块设备的速率(kb/s) </p> <p> system</p> <p> <span class="Apple-tab-span"> </span>in: 中断速率</p> <p> <span class="Apple-tab-span"> </span>cs: 进程切换的速率 </p> <p> cpu </p> <p> <span class="Apple-tab-span"> </span>us: </p> <p> <span class="Apple-tab-span"> </span>sy:</p> <p> <span class="Apple-tab-span"> </span>id:</p> <p> <span class="Apple-tab-span"> </span>wa:</p> <p> <span class="Apple-tab-span"> </span>st:</p> <p> <img src="/upload/dlyowb20hp4.png" title="1443966277588291.png" alt="blob.png" /> vmstat-s,显示内存的状态统计数据,详情见下图:<img src="/upload/fsthc4j0r4w.png" title="1444012421134741.png" alt="blob.png" /> <strong>补充:/proc/#接口:每一个进程都有一个与其pid号同名的目录,这里的文件就是内核参数中的映射。</strong></p> <p> 9.pmap: 查看指定进程的内存映射关系;语法格式:pmap [OPTIONS] pid…</p> <p><span class="Apple-tab-span"> </span>-x: 显示扩展信息</p> <p> 详情见下图:</p> <p><img src="/upload/qh3omsnuefh.png" title="1444013779241092.png" alt="blob.png" /></p> <p> 补充:采用cat /proc/#/maps 进行查看时,效果与上面相同,示例见下图:<img src="/upload/otc0lxe5tqg.png" title="1444013957786758.png" alt="blob.png" /></p> <p> 10.glances: 进程监控查看工具,命令语法格式如下:</p> <p> glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-P password] [–password] [-t refresh] [-f file] [-o output]</p> <p> 常用选项:</p> <p><span class="Apple-tab-span"> </span> -b: 以Byte/s为单位显示网卡设备数据交换速率;</p> <p><span class="Apple-tab-span"> </span> -d: 关闭磁盘I/O功能模块;</p> <p><span class="Apple-tab-span"> </span> -f /PATH/TO/SOMEFILE:设置输出文件的位置及格式;</p> <p><span class="Apple-tab-span"> </span> -o {HTML|CSV}:</p> <p><span class="Apple-tab-span"> </span> -m: 关闭mount功能模块</p> <p><span class="Apple-tab-span"> </span> -n: 关闭网络功能模块</p> <p><span class="Apple-tab-span"> </span> -r: 关闭进程列表功能模块</p> <p><span class="Apple-tab-span"> </span> -t #: 指定延迟时长,默认为3秒;</p> <p><span class="Apple-tab-span"> </span> -1:单独显示每颗CPU相关负载数据信息;</p> <p><span class="Apple-tab-span"> </span></p> <p> glances支持远程模式:</p> <p></p> <p><span class="Apple-tab-span"> </span> 即可以以C/S模式工作:</p> <p><span class="Apple-tab-span"> </span> Server: 以监听模式启动glances;</p> <p><span class="Apple-tab-span"> </span> Client: 以远程模式启动glances,远程连入指定服务器,并Server上的相关性能数据;</p> <p><span class="Apple-tab-span"> </span> </p> <p><span class="Apple-tab-span"> </span> 服务模式:</p> <p><span class="Apple-tab-span"> </span> glances -s -B IPADDR</p> <p><span class="Apple-tab-span"> </span> -B: 用于指明监听的本地地址;</p> <p><span class="Apple-tab-span"> </span> </p> <p><span class="Apple-tab-span"> </span> 客户端模式:</p> <p><span class="Apple-tab-span"> </span> glances -c IPADDR</p> <p><span class="Apple-tab-span"> </span> -c: 用于连入的服务器的地址;</p> <p></p> <p> glances工具默认情况下没有被安装,可通过yum命令单独进行安装,安装详情见下图:<img src="/upload/tbdpesryszx.png" title="1444014528440157.png" alt="blob.png" /></p> <p>例:以Byte/s为单位显示网卡设备数据交换速率,命令为:glances -b,详情见下图:<img src="/upload/cvo354pyvzu.png" title="1444015324597601.png" alt="blob.png" /></p> <p>例:关闭磁盘I/O功能模块,命令为:glances -d,,详情见下图:<img src="/upload/mn5mwyt44hc.png" title="1444015409324438.png" alt="blob.png" /></p> <p>例:glances实现C/S架构远程访问,详情见下图:<img src="/upload/2f1v43oc0q4.png" title="1444016561556820.png" alt="blob.png" /><img src="/upload/kqcuemxgmqc.png" title="1444016622511257.png" alt="blob.png" /></p> <p> 11.dstat: 整合了vmstat, iostat, netstat and ifstat四款工具的功能,命令语法格式如下:</p> <p> dstat [-afv] [options..] [delay [count]]</p> <p> 常用选项:</p> <p> -c: 显示cpu性能指标相关的统计数据;</p> <p> -d: 显示disk相关的速率数据;</p> <p> -g: 显示page相关的速率数据;</p> <p> -i: 显示interrupt相关的速率数据;</p> <p> -l: 显示load average相关的统计数据;</p> <p> -m: 显示memory相关的统计数据;</p> <p> -n: 显示网络收发数据的速率;</p> <p> -p: 显示进程相关的统计数据,</p> <p> -r: io请求的速率;</p> <p> -s: 显示swap的相关数据</p> <p> -y: 显示系统相关的数据,包括中断和进程切换;</p> <p> </p> <p> –top-cpu:显示最占用CPU的进程;</p> <p> –top-bio:显示最消耗block io的进程;</p> <p> –top-io:最占用io的进程;</p> <p> –top-mem:显示最占用内存的进程;</p> <p> </p> <p> –ipc: 显示进程间通信相关的速率数据;</p> <p> –raw: 显示raw套接的相关的数据;</p> <p> –tcp: 显示tcp套接字的相关数据;</p> <p> –udp: 显示udp套接字的相关数据;</p> <p> –unix: 显示unix sock接口相关的统计数据;</p> <p> –socket: </p> <p> </p> <p> -a: -cdngy</p> <p> dstat工具默认情况下没有被安装,可通过yum命令单独进行安装,安装详情见下图:<img src="/upload/5k1pyxwpqde.png" title="1444019201790476.png" alt="blob.png" /></p> <p>例:使用dstat查看CPU用量,命令为:dstat -c,详情见下图:</p> <p><img src="/upload/yizrmtn50nc.png" title="1444019963390950.png" alt="blob.png" /></p> <p>例:使用dstat显示disk相关的速率数据,命令为:dstat -d,详情见下图:<img src="/upload/3xv34zty1kf.png" title="1444020070646409.png" alt="blob.png" /></p> <p>例:使用dstat显示page相关的速率数据,命令为:dstat -g,详情见下图:</p> <p><img src="/upload/5tvuyn3avhc.png" title="1444021691400533.png" alt="blob.png" />例:使用dstat显示load average相关的统计数据,命令为:dstat -l,详情见下图:</p> <p><img src="/upload/shtfkzvqajz.png" title="1444021896632263.png" alt="blob.png" /></p> <p>例:使用dstat显示网络收发数据的速率,命令为:dstat -n,详情见下图:<img src="/upload/4cizdmlxxes.png" title="1444022027867969.png" alt="blob.png" /></p> <p>例:使用dstat显示最占用CPU的进程,命令为:dstat –top-cpu,详情见下图:<img src="/upload/zuewlnqgxar.png" title="1444022425317017.png" alt="blob.png" /></p> <p>例:使用dstat显示最占用io的进程及最占用内存的进程,命令为:dstat –top-cpu 及 dstat –top-mem,详情见下图:<img src="/upload/fskfm3oaxym.png" title="1444022803617073.png" alt="blob.png" /></p> <p> 补充:IPC: 进程间通信</p> <p><span class="Apple-tab-span"></span> 常见形式:</p> <p><span class="Apple-tab-span"> </span> message queue(消息队列)</p> <p><span class="Apple-tab-span"> </span> semerphore(信号量)</p> <p><span class="Apple-tab-span"> </span> shared memory(共享内存)</p> <p><span class="Apple-tab-span"> </span> signal(信号)</p> <p></p> <p> 12.signal: 传递给进程的短小信息</p> <p> <span class="Apple-tab-span"> </span>Linux主机支持的进程间可用到的信息:</p> <p> <span class="Apple-tab-span"> </span>(1) kill -l</p> <p> <span class="Apple-tab-span"> </span>(2) man 7 signal</p> <p> <span class="Apple-tab-span"> </span></p> <p> <span class="Apple-tab-span"> </span>向进程发信号:</p> <p> <span class="Apple-tab-span"> </span>kill [-SIGNAL] PID </p> <p> <span class="Apple-tab-span"> </span>默认的信号为SIGTERM(15号);</p> <p> <span class="Apple-tab-span"> </span></p> <p> <span class="Apple-tab-span"> </span>信号表示方式:</p> <p> <span class="Apple-tab-span"> </span>(1) 完整名称,例如SIGINT</p> <p> <span class="Apple-tab-span"> </span>(2) 简写名称,例如INT</p> <p> <span class="Apple-tab-span"> </span>(3) 数据代称,例如2</p> <p> <span class="Apple-tab-span"> </span>常用信号:</p> <p> <span class="Apple-tab-span"> </span>SIGHUP: 1, 通知进程重读其配置文件以让新的配置生效,但不用重新启动进程;</p> <p> <span class="Apple-tab-span"> </span>SIGINT:2, 打断正在运行中的进程,相当于键盘组合键Ctrl+c</p> <p> <span class="Apple-tab-span"> </span>SIGKILL:9, 强行中止正在运行中的进程</p> <p> <span class="Apple-tab-span"> </span>SIGTERM: 15, 安全中止正在运行中的进程(kill后面不加信号值默认为15号)</p> <p> <span class="Apple-tab-span"> </span>SIGSTOP: 19, 暂停进程</p> <p> <span class="Apple-tab-span"> </span>SIGCONT: 18, 继续运行指定进程</p> <p></p> <p>例:查看当前系统中支持的信号种类及各信号含义,命令为:kill -l,详情见下图:</p> <p><img src="/upload/4xubpdkrv5k.png" title="1444023677106031.png" alt="blob.png" /></p> <p>例:使用kill命令安全结束tomcat进程,命令为:kill tomcat端口号,详情见下图:<img src="/upload/40ocakj1za4.png" title="1444027638119777.png" alt="blob.png" /></p> <p> kill相似的一组进程,语法格式:killall [-SIGNAL] PROGRAM</p> <p>例:使用killall命令安全结束名称全部为java的进程,命令为:killall java,详情见下图:<img src="/upload/10dukfm3kja.png" title="1444027957676632.png" alt="blob.png" /></p> <p> 作业管理:</p> <p><span class="Apple-tab-span"> </span>前台作业:通过终端启动,并且在停止之前也会一直占据终端;</p> <p><span class="Apple-tab-span"> </span>后台作业:作业启动之时与终端无关,或者是在前台启动,但启动后转为与终端无关模式运行;</p> <p><span class="Apple-tab-span"> </span></p> <p> 如何让作业运行于后台?</p> <p><span class="Apple-tab-span"> </span>1、对于已经启动并处于运行中的作业:组合键:Ctrl+z</p> <p> Note: 作业被送往后台后,默认处于stopped状态;</p> <p>例:用vim打开a.txt文件后让其运行与后台,详情如下图:</p> <p><span class="Apple-tab-span"><img src="/upload/vizcysehibc.png" title="1444029661284028.png" alt="blob.png" /> </span> </p> <p> 2、对于尚未启动的作业:COMMAND &</p> <p><span class="Apple-tab-span">例:</span>直接用vim a.txt &这种方式可以实现让vim a.txt这个进程直接在后台运行<span class="Apple-tab-span">,详情如下图: </span></p> <p><img src="/upload/x0nvluqvhck.png" title="1444030127715950.png" alt="blob.png" /> </p> <p><strong>注意: 此两类方式相关作业,仍然与终端相关;这意味着,终端终止,将会导致与此终端相关的所有作业被终止;</strong></p> <p> 剥离进程与终端的关系:# nohup COMMAND &</p> <p><span class="Apple-tab-span"><span class="Apple-tab-span">例:nohup ping 127.0.0.1 & 命令可以实现剥离终端进程直接在后台运行,详情如下图:</span></span><img src="/upload/gawy0qgy1ll.png" title="1444031526156404.png" alt="blob.png" /></p> <p> </p> <p><span class="Apple-tab-span"> </span>作业查看:</p> <p><span class="Apple-tab-span"> </span></p> <p><span class="Apple-tab-span"> </span> jobs命令</p> <p><span class="Apple-tab-span"> </span> 作业号、作业状态、启动命令行程序</p> <p><span class="Apple-tab-span"> </span><span class="Apple-tab-span">例:</span>使用jobs查看处于后台运行的作业<span class="Apple-tab-span">,详情如下图:</span></p> <p><img src="/upload/s4ct5o313xq.png" title="1444032221795529.png" alt="blob.png" /></p> <p> </p> <p><span class="Apple-tab-span"> </span> 作业控制命令:</p> <p> fg [[%]job_num]:把指定的作业调回前台,示例:fg 1 等价于 fg %1 这里百分号可以省略,详见下图:</p> <p><img src="/upload/5gy3e54lshd.png" title="1444032691291121.png" alt="blob.png" /></p> <p><span class="Apple-tab-span"> </span><img src="/upload/gobq15ynbik.png" title="1444033086119205.png" alt="blob.png" /><img src="/upload/5qv3ocv02yg.png" title="1444033517292710.png" alt="blob.png" /></p> <p> bg [[%]job_num]:把调往后台的指定的作业启动起来,让其后台默默运行;但此作业必须支持运行于后台(例如 cp、mv、rm命令等);</p> <p><span class="Apple-tab-span"> </span> </p> <p> kill [%job_num]:终止指定的作业,这里百分号不能省(省略就变成杀死进程号),具体示例详见下图:<img src="/upload/anhxwcb2z3d.png" title="1444034188222792.png" alt="blob.png" /></p> <p><span class="Apple-tab-span"> </span> </p> <p><span class="Apple-tab-span"> </span>进程优先级调整:</p> <p></p> <p> 静态优先级:通过指定进程的nice值来调整其优先级;用户空间运行进程一般都有其nice值;</p> <p><span class="Apple-tab-span"> </span> nice值: -20, 19</p> <p><span class="Apple-tab-span"> </span> 优先级: 100, 139</p> <p><span class="Apple-tab-span"> </span></p> <p> 默认启动进程时,其nice值为0, 其优先级为120;</p> <p><span class="Apple-tab-span"> </span> (1) 对于尚未启动的进程:# nice -n N COMMAND</p> <p><span class="Apple-tab-span"> </span></p> <p><span class="Apple-tab-span"> </span> (2) 对于已经启动并处于运行中的进程:# renice -n N PID </p> <p> 具体示例详见下图:</p> <p><img src="/upload/ccyfdlvb5b5.png" title="1444035594471537.png" alt="blob.png" /></p> <p><span class="Apple-tab-span"> </span></p> <p> 注意:nice值越小优先级越高,普通用户仅能够调大nice,调低优先级;</p> <p></p> <p> 补充pkill命令,该命令也可实现杀死运行中的程序,也可用作踢除当前系统登录用户使用(仅管理员可用):</p> <p> 1. 将某个终端的用户踢出</p> <p> pkill -kill -t pts/2(终端号)</p> <p> 2. 按用户名踢出用户</p> <p> pkill -kill -U test(系统用户名)</p> <p></p> <p> 其他相关命令:sar, iostat, ifstat, tsar等留待今后继续研究。</p> <p></p> <p></p> <p></p> <p></p> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信