进程状态

https://www.cnblogs.com/diegodu/p/9167671.html

Linux进程状态:D (TASK_UNINTERRUPTIBLE),不可中断的睡眠状态。

与TASK_INTERRUPTIBLE状态类似,进程处于睡眠状态,但是此刻进程是不可中断的。不可中断,指的并不是CPU不响应外部硬件的中断,而是指进程不响应异步信号。

在进程对某些硬件进行操作时(比如进程调用read系统调用对某个设备文件进行读操作,而read系统调用最终执行到对应设备驱动的代码,并与对应的物理设备进行交互),可能需要使用TASK_UNINTERRUPTIBLE状态对进程进行保护,以避免进程与设备交互的过程被打断,造成设备陷入不可控的状态。这种情况下的TASK_UNINTERRUPTIBLE状态总是非常短暂的,通过ps命令基本上不可能捕捉到。

进程占用内存

在讲解ps命令的参数之前,有必要先介绍一下Linux对进程占用内存的计算依据。因为Linux中的进程是使用虚拟地址的,这些进程通过malloc()或者mmap()向内存申请内存之后(这部分内存大小称为VSS - Virtual Set Size),内核并不会立刻为其分配实际的物理内存。等到进程真正使用到内存时(比如调用了memset()函数),内核才会为这个进程分配物理内存,并建立虚拟地址和物理地址之间的映射(参考这篇文章)。

SYSV 风格选项 - A 到 - Z 和 - a 到 - z 共 52 个,BSD 风格选项 A 到 Z 和 a 到 z 共 52 个。于是 ps 命令就有一共 104 个命令选项可能性。

ps.jpg

在这 104 个命令选项中,未启用的或曾经使用过现在废弃的命令选项有如下 40 个,分别是 A、B、C、D、E、F、G、I、J、K、P、Q、R、W、Y、b、d、i、y、z、-B、-D、-E、-I、-J、-K、-Q、-R、-S、-W、-X、-Y、-b、-h、-i、-k、-r、-v、-x 和 - z。

输出是不同的

[root@node1 ~]# ps aux | wc -l

125

[root@node1 ~]# ps | wc -l

4

[root@node1 ~]#

常用

Linux ps 命令显示所有进程信息的选项只有 2 个,即 SYSV 风格的 - e 和 - A。相比之下,-e 更容易记忆和书写,请大家牢记这个 - e 选项。

大家知道,ps 命令的所有信息都是 linux kernel 生成,并通过 / proc / 目录输出给用户空间的。在 / proc / 目录下,每一个以数字开头的目录,就对应一个进程信息。既然如此,通过如下命令便可一目了然。

ps -e | wc -l && ps -A | wc -l&& ls /proc/ | grep '^[1-9]' | wc -l

证明 参数 - e 和 - A 显示的进程记录数确实和 proc 目录下的所有进程目录数一致。

#树形排序( 进程之间的关系)

f 和 - H 就是实现这个树形排序功能的 2 个选项。

#排序

选项 k 可以让我们以某个字段为条件对输出结果进行排序,并且还可以使用 +- 符号设置升序排序还是降序排序

ps -e u k rss

ps -e u k -rss

ps -e k ppid,rss -o pid,ppid,rss,ucmd

先按 ppid 进行升序排序,ppid 值相同时,再按 rss 值进行升序排序。

#进程数

ps -eL h| wc -l

#线程信息

ls /proc/6270/task/

Linux ps 同样提供了一组选项可以将每个进程的线程信息详细展现,这组选项包括 H、-L、-T、M、m 和 - m。在讲解这些选项之前,我们先看一个小测试。

ps -C mysqld -L #查看mysql 线程

第一行 PID 等于 LWP(线程 ID)的值,说明是线程组的主线程(即进程)。其余三个线程 ID 各不相同,但 PID 值都和主线程的 PID 值一样,说明是同一线程组的普通线程。

ps -C mysqld -m O lwp #同样和上一个命令

#ps 一共有多少显示项目

ps L | wc -l

Linux ps 命令的 aux 选项组合输出 PID、%CPU、%MEM、RSS、TIME 等数据项,ps 命令的 - el 选项组合输出 PID、PPID、WCHAN、TIME、CMD 等数据项。首先一个问题就是,ps 命令一共有多少数据项可以输出。这个问题很好回答,通过 L 选项很容易获取,一共有 168 个数据输出项。

其次的一个问题就是,是什么决定了 ps aux 命令输出结果中恰恰包含 USER、PID、%CPU、%MEM、VSZ、RSS、TTY、STAT、START、TIME 和 COMMAND 这 11 个数据项呢。原因是 ps 命令中有一些选项用来对数据字段进行固定组合的作用。其中 aux 中的 u 选项就固定包含了以上 11 个数据输出项,并且他们的显示顺序也已经固化在代码中。

参数为

BSD 风格时,默认都会显示 PID、TTY、STAT、TIME 和 COMMAND 这 5 个字段。

参数为 SYSV 风格时,默认都会显示 PID、TTY、TIME 和 CMD 这 4 个字段。

ps 命令无参数时默认为 SYSV 风格。

ps -o %p,%P,%n,%a,%x,%t

PID, PPID, NI,COMMAND , TIME, ELAPSED

456, 454, 0,-bash ,00:00:01, 06:20:28

22945, 456, 0,ps -o %p,%P,%n,%a,%x,%t ,00:00:00, 00:00

[root@node1 ~]# ps -o "%p|%P|%n|%a|%x|%t"

PID| PPID| NI|COMMAND | TIME| ELAPSED

456| 454| 0|-bash |00:00:01| 06:21:14

22990| 456| 0|ps -o %p|%P|%n|%a|%x|%t |00:00:00| 00:00

使用 w 或 - w 选项,就会将完整的进程命令信息显示,多出的部分换行显示。有的时候为了效果好一点,建议我们可以多使用几次 w 选项,比如 ww、www 或 wwww。

选项 u 的 COMMAND 字段,默认会输出进程路径和执行参数信息。从上面的例子可以看出,选项 c 可以使选项 u 的 COMMAND 字段更加精简,只保留进程名称。选项 e 可以使选项 u 的 COMMAND 字段更加丰富,增加进程环境变量的相关内容。

[root@node1 ~]# ps u c

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

root 456 0.0 0.2 116456 3136 pts/0 Ss 10:45 0:01 bash

root 2163 0.0 0.2 116232 2604 pts/1 Ss+ 11:13 0:00 bash

root 6079 0.0 0.0 110104 796 tty1 Ss+ 3月21 0:00 agetty

root 23201 0.0 0.1 155360 1824 pts/0 R+ 17:10 0:00 ps

[root@node1 ~]# ps u e ww

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

root 456 0.0 0.2 116456 3136 pts/0 Ss 10:45 0:01 -bash USER=root LOGNAME=root HOME=/root PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin MAIL=/var/mail/root SHELL=/bin/bash SSH_CLIENT=192.168.174.1 1969 22 SSH_CONNECTION=192.168.174.1 1969 192.168.174.202 22 SSH_TTY=/dev/pts/0 TERM=vt100 XDG_SESSION_ID=149 XDG_RUNTIME_DIR=/run/user/0

root 2163 0.0 0.2 116232 2604 pts/1 Ss+ 11:13 0:00 -bash USER=root LOGNAME=root HOME=/root PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin MAIL=/var/mail/root SHELL=/bin/bash SSH_CLIENT=192.168.174.1 1969 22 SSH_CONNECTION=192.168.174.1 1969 192.168.174.202 22 SSH_TTY=/dev/pts/1 TERM=vt100 XDG_SESSION_ID=149 XDG_RUNTIME_DIR=/run/user/0

root 6079 0.0 0.0 110104 796 tty1 Ss+ 3月21 0:00 /sbin/agetty --noclear tty1 linux LANG= PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin TERM=linux LANGUAGE= LC_CTYPE= LC_NUMERIC= LC_TIME= LC_COLLATE= LC_MONETARY= LC_MESSAGES= LC_PAPER= LC_NAME= LC_ADDRESS= LC_TELEPHONE= LC_MEASUREMENT= LC_IDENTIFICATION=

root 23209 0.0 0.1 155360 1832 pts/0 R+ 17:10 0:00 ps u e ww XDG_SESSION_ID=149 HOSTNAME=node1 TERM=vt100 SHELL=/bin/bash HISTSIZE=1000 SSH_CLIENT=192.168.174.1 1969 22 SSH_TTY=/dev/pts/0 USER=root etcd=/usr/local/kubernetes/bin LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36: MAIL=/var/spool/mail/root PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/kubernetes/bin:/root/bin PWD=/root LANG=zh_CN.UTF-8 HISTCONTROL=ignoredups SHLVL=1 HOME=/root LOGNAME=root XDG_DATA_DIRS=/root/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share SSH_CONNECTION=192.168.174.1 1969 192.168.174.202 22 LESSOPEN=||/usr/bin/lesspipe.sh %s XDG_RUNTIME_DIR=/run/user/0 _=/usr/bin/ps

linux ps 简书,史上最全ps 命令解析相关推荐

  1. 150个CMD命令(史上更全cmd命令 net命令)

    目录 cmd命令大全: net命令 加油各位( •̀ ω •́ )y 期待与君再相逢 150个CMD命令(史上更全cmd命令 net命令) 运行操作cmd命令:开始-运行(或快捷键win+R) -输入 ...

  2. linux vi使用手册,史上最全VIM使用手册

    vim是一个向上兼容于vi的文本编辑器,可用于编辑各种纯文本.它对编辑程序特别有用. 基本模式:编辑模式:默认编辑文件进入的模式 输入模式: 末行模式:内置的命令行接口 基本使用:# vim [opt ...

  3. Linux 史上最全top命令及参数详解

    总目录 **一.top简介** **二.top命令** 1.top -d:number代表秒数 默认5秒 刷新一次 2.top -b:以批次的方式执行top 3.top -b: '批量模式',用来将输 ...

  4. linux 怎么卸载gnome-screenshot,史上最全的使用 gnome-screenshot 获取屏幕快照指南

    在应用市场中有好几种屏幕截图工具,但其中大多数都是基于 GUI 的.如果你花时间在 linux 命令行上工作,而且正在寻找一款优秀的功能丰富的基于命令行的屏幕截图工具,你可能会想尝试 gnome-sc ...

  5. latex 甘特图_[简004] 史上'最全最精简'Markdown语法-速览速用

    < Markdown Syntax by Andy - Saturday, March 16, 2019> 目录: 一.Markdown 基础常用语法速览速用 1. 标题1-6(" ...

  6. python资料书-史上最全Python从入门到资深书籍资料分享!

    今天我来为大家分享十本不可错过的Python好书,分别适合入门.进阶到精深三个不同阶段的人来阅读. Python高性能编程 Amazon 五星畅销书. Python 入门进阶必读. Python代码仅 ...

  7. linux操作系统版本_史上最全的Linux 各个发行版本的优点、缺点、发展史介绍

    概述 今天主要学习一下Linux 各个发行版本,看一下各个发现版本的发展史. 什么是Linux? 也许很多人会认为Linux不就是个操作系统么.其实严格来讲,Linux只是一个操作系统中的内核.内核是 ...

  8. 一文搞定Linux shell脚本编程( 史上最全汇总 )

    目录 Shell是一种脚本语言 第一个Shell脚本 Shell编程语法 Shell变量 字符串 Shell数组 位置参数 内建命令 echo read printf exit test 流程控制 i ...

  9. 史上最全Git命令学习:从基础出发,Java中高级面试题总结(全面)

    将暂存区的文件提交本地仓库: 将本地仓库的文件推送到远程仓库: Git文件的四种状态 根据一个文件是否已加入版本控制,可以把文件状态分为:Tracked(已跟踪)和Untracked(未跟踪),而tr ...

最新文章

  1. 万字干货:如何从零开始构建企业级推荐系统?
  2. MySQL存储过程_创建-调用
  3. Python词云学习之旅
  4. 《机器学习实战》第九章
  5. Lua 学习笔记(一)
  6. python里split_python中split()的用法
  7. 设计模式 (一) 初次体验
  8. 分享SEO关键字如何精准报价--迅脉互联
  9. 利用US-100超声波传感器测距的核心代码
  10. matlab命令窗口汉字显示为乱码 添加绝对路径
  11. chrome下载速度慢,手把手教学
  12. 一个完整的计算机系统五个基本部分组成,一个完整的计算机系统
  13. 使用C#开发纽曼USB来电通来电弹屏客户端小结
  14. 我喜欢的作品风格: 韩国daksha作品IF YOU GO AWAY…
  15. 金蝶全渠道营销列车,邀请您上车
  16. 无广告、无推送、无新闻,这7款手机浏览器实用且优秀
  17. html 绘制矩形,HTML5中使用canvas绘制矩形
  18. 读书笔记三:《运营之光》互联网运营方法论与自白(上)
  19. Jupyter notebook无法自动打开浏览器解决方法
  20. linux查找文件并替换文件名字符串

热门文章

  1. HDU2188 选拔志愿者题解
  2. biti_rainy的博客
  3. 基于51单片机的脉搏测量仪protues仿真设计
  4. echarts 绘制省份地图 [ 把不同省份的市合并在一起 ]
  5. User-Agent(用户代理)是什么
  6. 一搜◎欢乐搜索 变相滋生垃圾邮件与病毒
  7. 我用20种编程语言送上新年的祝福,Happy new year!
  8. 大学计算机基础毕业论文操作步骤,大学计算机基础教学论文论文
  9. springboot+quartz报错:Table ‘XXXX.QRTZ_TRIGGERS‘ doesn‘t exist
  10. 计算机网络战队名称大全,电竞游戏战队名字大全