流年似水博客开通了,本站主要是写关于Web和大数据方面内容,正在更新中,欢迎大家光临!
  1. 文章:97 篇
  2. 总浏览:69,703 次
  3. 评论:22条
  4. 最后更新:2020-06-08
  5. 分类目录:39 个

Linux之ps命令详解

Command l, xy 449℃ 0评论

 Linux之ps命令详解

一、 命令作用

            将某个时间点的进程运作情况获取下来

二 、 常用的命令参数

        2.1 常用参数

[root@study ~]# ps aux <==观察系统所有的进程数据
[root@study ~]# ps -lA <==也是能够观察所有系统的数据
[root@study ~]# ps axjf <==连同部分进程树状态
[root@study ~]# ps -ef  <==观察系统所有进程数据
选项与参数:
-A  :所有的 process 均显示出来,与 -e 具有同样的效用;
-a  :不与 terminal 有关的所有 process ;
-u :有效使用者 (effective user) 相关的 process ; x :通常与 a 这个参数一起使用,可列出较完整信息。

输出格式规划:
      l	:较长、较详细的将该 PID 的的信息列出;
      j	:工作的格式 (jobs format) -f :做一个更为完整的输出
      f :做一个更为完整的输出

         2.2 注意:

            1. 一般我们查看自己bash的进程需要使用 ps -l

            2. 查看全部进程使用ps aux 或者 ps -aux 或者 ps -ef 即可

三、 案例

        3.1 将目前属于您自己这次登入的 PID 与相关信息列示出来(只与自己的 bash 有关)

    

系统整体的进程运作是非常多的,但如果使用 ps -l 则仅列出与你的操作环境 (bash) 有关的进程
而已, 亦即最上层的父进程会是你自己的 bash 而没有延伸到 systemd (后续会交待! ) 这支进程
去!那么 ps -l 秀出来的资料有哪些呢? 

我们就来观察看看:

1、 F:代表这个进程旗标 (process flags),说明这个进程的总结权限,常见号码有:
若为 4 表示此进程的权限为 root ;
若为 1 则表示此子进程仅进行复制(fork)而没有实际执行(exec)。
2、 S:代表这个进程的状态 (STAT),主要的状态有:
R (Running):该程序正在运作中;
S (Sleep):该程序目前正在睡眠状态(idle),但可以被唤醒(signal)。
D :不可被唤醒的睡眠状态,通常这支程序可能在等待 I/O 的情况(ex>打印)
T :停止状态(stop),可能是在工作控制(背景暂停)或除错 (traced) 状态;
Z (Zombie):僵尸状态,进程已经终止但却无法被移除至内存外。
3、 UID/PID/PPID:代表『此进程被该 UID 所拥有/进程的 PID 号码/此进程的父进程 PID 号码』
4、 C:代表 CPU 使用率,单位为百分比;
5、 PRI/NI: Priority/Nice 的缩写,代表此进程被 CPU 所执行的优先级,数值越小代表该进程越快被 CPU 执行。

6、 ADDR/SZ/WCHAN:都与内存有关, ADDR 是 kernel function,指出该进程在内存的哪个部分,如果是个
running 的进程,一般就会显示『- 』 / SZ 代表此进程用掉多少内存 / WCHAN 表示目前进程是否运作中,
同样的, 若为 - 表示正在运作中。
7、 TTY:登入者的终端机位置,若为远程登录则使用动态终端接口 (pts/n);
8、 TIME:使用掉的 CPU 时间,注意,是此进程实际花费 CPU 运作的时间,而不是系统时间;
9、 CMD:就是 command 的缩写,造成此进程的触发程序之指令为何。
所以你看到的 ps -l 输出讯息中,他说明的是:『bash 的程序属于 UID 为 0 的使用者,状态为
睡眠 (sleep), 之所以为睡眠因为他触发了 ps (状态为 run) 之故。此进程的 PID 为 14836,优
先执行顺序为 80 , 下达 bash 所取得的终端接口为 pts/0 ,运作状态为等待 (wait) 。』这样已
经够清楚了吧? 您自己尝试解析一下那么 ps 那一行代表的意义为何呢? ^_^

        3.2 列出目前所有的正在内存当中的进程

你会发现 ps -l  与 ps aux  显示的项目并不相同!在 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 的顺序来排序显示,我们还是以 14836 那个 PID 那行来说明!该行的意义为『 root 执行的 bash PID 为 14836,占用了 0.1% 的内存容量百分比,状态为休眠 (S),该进程启动的时间为 8 月 4 号,因此启动太久了, 
所以没有列出实际的时间点。且取得的终端机环境为 pts/1 。』与 ps aux 看到的其实是同一个进程啦!这样可以理解吗?

        3.3 以范例一的显示内容,显示出所有的进程

        3.4 列出类似进程树的进程显示

其实还可以使用 pstree 来达成这个进程树喔!


        3.5 找出与 cron 与 rsyslog 这两个服务有关的 PID 号码?

除此之外,我们必须要知道的是『僵尸 (zombie) 』进程是什么? 通常,造成僵尸进程的成因是因为该进程应该已经执行完毕,或者是因故应该要终止了, 但是该进程的父进程却无法完整的将
该进程结束掉,而造成那个进程一直存在内存当中。 如果你发现在某个进程的 CMD 后面还接上<defunct> 时,就代表该进程是僵尸进程啦,例如:

当系统不稳定的时候就容易造成所谓的僵尸进程,可能是因为程序写的不好啦,或者是使用者的操作习惯不良等等所造成。 如果你发现系统中很多僵尸进程时,记得啊!要找出该进程的父进程,
然后好好的做个追踪,好好的进行主机的环境优化啊! 看看有什么地方需要改善的,不要只是直接将他 kill 掉而已呢!不然的话,万一他一直产生,那可就麻烦了! @_@

事实上,通常僵尸进程都已经无法控管,而直接是交给 systemd 这支程序来负责了,偏偏 systemd是系统第一支执行的程序, 他是所有程序的父程序!我们无法杀掉该程序的 (杀掉他,系统就死
掉了! ),所以啰,如果产生僵尸进程, 而系统过一阵子还没有办法透过核心非经常性的特殊处理来将该进程删除时,那你只好透过 reboot 的方式来将该进程抹去了!

转载请注明:流年似水 » Linux之ps命令详解

喜欢 (0)or分享 (0)

Warning: copy(https://cn.gravatar.com/avatar/?s=54&d=%2Fwp-content%2Fthemes%2Fyusi1.0%2Fimg%2Fdefault.png&r=g): failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request in /usr/share/nginx/html/timewentby/wp-content/themes/yusi1.0/functions.php on line 239

Warning: copy(/wp-content/themes/yusi1.0/img/default.png): failed to open stream: No such file or directory in /usr/share/nginx/html/timewentby/wp-content/themes/yusi1.0/functions.php on line 243
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址