此ps非某ps。
阿拉说的是linux里历史悠久,运维人员人人爱的ps,不是摄影相关的那个哟。不管哪个,都能让人浑身难受,外加回想起某次加班到深夜的惨痛经历。懂的懂的,阿拉过去也是差点成为设计狗,没想到跳出那个ps的坑,还有这个ps等着我。
好奇戳进来的萌宝宝们就姑且当个故事看下去吧。如果姑且不会觉得不耐烦的话。
但愿搜索引擎足够强大。让阿拉的文章也去非专业的领域漏漏脸。
此ps是processes的简写。linux里这种简写的命令还不少呢。有时候出现首字母简写的反而让人觉得不舒服,比如usr,阿拉相当长的一段时间都认为那是user的缩写,然而,事实上,那更多的可能是Unix System Resource。为什么说可能呢?嗨,最初的时候这个目录下放的的确是用户信息,后来有/home了,这家伙就渐渐成为了系统类文件夹,也有说是unix software resources的缩写的。
看吧,就算是IT行业,也不是凡事都有标准的。嘛,理解成技术人员的幽默的话你也算是个及格的初学者了。
processes顾名思义,就是进程。话说英语好学IT真的是个助力啊。
不好也没关系。学linux还能提升英语素养。一套完整的课程下来,说不定四级就能过了呢。
正题,咳咳。
单敲ps显示当前终端下正在运行的进程。
[root@centos7 usr]# ps
PID TTY TIME CMD
6262 pts/1 00:00:00 bash
9032 pts/1 00:00:00 ps
第一行有PID、TTY的选项,这个我们下面再说。
ps后可以跟选项,所跟的选项有三种格式――UNIX格式、BSD格式、GNU格式。一般掌握一种格式的也就够用了。关于为什么有这么多格式,可以归结为――这个命令的历史太悠久了。有多悠久呢?
差不多UNIX诞生之初就有了。UNIX诞生于1970年,所以后来分支出的BSD派系和GNU开源LInux都承继了这一命令。阿拉最常使用的CentOS系列命令选项有长选项和短选项之分,短选项对应UNIX格式,长选项对应的,就是GNU格式了。短选项方便,对于初学者却很容易搞混。长选项对英语不好的是个挑战呐。来吧,提高英语能力的机会来了,哈哈。
鉴于英语好的都去直接man ps查看帮助文档了。这里阿拉就省略很少使用,啊不,是基本不用的GUN格式了。
下面是两种格式格式常用的选项。
UNIX格式选项:
a 显示当前主机所有终端
x 包括和终端无关的进程(守护进程)
u 显示所有者(进程的USER――生效的用户名)
f 缩进显示父子进程
o 指定显示字段
k|--sort 排序(按指定选项)
举个例子:
ps axo pid,cmd,%cpu,%mem 显示当前主机下所有进程,仅显示pid、cmd、%cpu、%mem字段
[root@centos6 ~]# ps axo pid,cmd,%cpu,%mem PID CMD %CPU %MEM 1 /sbin/init 0.5 0.0 2 [kthreadd] 0.0 0.0 3 [migration/0] 0.0 0.0 4 [ksoftirqd/0] 0.0 0.0 5 [stopper/0] 0.0 0.0 6 [watchdog/0] 0.0 0.0 7 [events/0] 0.2 0.0 8 [events/0] 0.0 0.0 9 [events_long/0] 0.0 0.0 10 [events_power_ef] 0.0 0.0 11 [cgroup] 0.0 0.0 12 [khelper] 0.0 0.0 13 [netns] 0.0 0.0 14 [async/mgr] 0.0 0.0 15 [pm] 0.0 0.0 16 [sync_supers] 0.0 0.0 17 [bdi-default] 0.0 0.0 18 [kintegrityd/0] 0.0 0.0 .......(以下省略)
当我们加上f选项时,我们会看到更多的信息。
[root@centos6 ~]# ps auxfUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 2 0.0 0.0 0 0 ? S 03:22 0:00 [kthreadd]root 3 0.0 0.0 0 0 ? S 03:22 0:00 \_ [migrat]root 4 0.0 0.0 0 0 ? S 03:22 0:00 \_ [ksofti]root 5 0.0 0.0 0 0 ? S 03:22 0:00 \_ [stoppe]root 6 0.0 0.0 0 0 ? S 03:22 0:00 \_ [watchd]root 7 0.2 0.0 0 0 ? S 03:22 0:01 \_ [events]root 8 0.0 0.0 0 0 ? S 03:22 0:00 \_ [events]root 9 0.0 0.0 0 0 ? S 03:22 0:00 \_ [events]root 10 0.0 0.0 0 0 ? S 03:22 0:00 \_ [events]root 11 0.0 0.0 0 0 ? S 03:22 0:00 \_ [cgroup]root 12 0.0 0.0 0 0 ? S 03:22 0:00 \_ [khelpe]root 13 0.0 0.0 0 0 ? S 03:22 0:00 \_ [netns]root 14 0.0 0.0 0 0 ? S 03:22 0:00 \_ [async/]root 15 0.0 0.0 0 0 ? S 03:22 0:00 \_ [pm]root 16 0.0 0.0 0 0 ? S 03:22 0:00 \_ [sync_s]root 17 0.0 0.0 0 0 ? S 03:22 0:00 \_ [bdi-de]root 18 0.0 0.0 0 0 ? S 03:22 0:00 \_ [kinteg]...........(以下省略)
事实上,使用o选项时,能指定的还有pid、comm、%cpu、%mem、stat、tty、euser、ruse、euid、ruid、tpgid、sess、pgrp、ppid、pcpu、tid、class、rtprio、ni、pri、psr。嘿嘿,这些用到的时候再man就可以了。知道常用的含义就足够了。
linux学习就像在读一本厚厚的字典,知道使用方法比背下来要轻松的多,也有用的多。毕竟背字典呐,对很多人来说都没有必要的啊。有背下的大神,且受阿拉一拜。现充去死啊!!!
抱歉,失礼了。IT设计面太广,要真的抓不住重点,想到哪里学到哪里会吃大亏的。阿拉之前不承认,现在……
阿拉没什么故事,只是勉强比常人多了点发叉的脑神经罢了。有段时间阿拉会为老师布置的题目纠结。比如这个http://amelie.blog.51cto.com/12850951/1953359。真正烦的,笔墨根本写不出十分之一。啊啊,那句话说的很好呢――我只是发现了一千条行不通的路。越长大越发现没有绝对的正确,其中的差距呢,如果你觉得还好,那就这样吧。阿拉的不值一提的小毛病,关键时刻却误事的很呢。阿拉想要导向正确答案的能力。而这能力,永远有可进步的余地。
如何尽快从牛角尖里钻出来,大概也算一种看清自己的测试吧,是进步还是咋,最清楚的人,还是自己罢。
常见选项如下:
USER:进程用户
euser---实际生效的user
ruser---进程的发起者,表现为进程运行文件的所属主
PID:进程号,每个进程都有唯一的进程编号
%CUP:cup占用率
%MUM:内存占用率
VSZ:虚拟内存,即为系统承诺分配的内存
RSS:真实内存,即进程实际占用的内存
TTY:终端窗口(即位于哪个终端,守护进程显示为?。守护进程为运行在后台,不受任何终端控制的进程,如init。init是开机启动的第一个进程,进程号为0)
time---CPU分配时间片时间总和(单核CPU一次只能运行一个进程,为了多进程同步执行,要进行时间分片,如将1秒分为100个时间片,一时间片为10毫秒。此项为进程占用时间片总时长。不要觉得不可能哦,听歌看视频类的也是可以分片的哦,只不过时间太短人们感觉不到啦!)
stat---进程状态
R:running,运行态
S: interruptable sleeping,可中断的睡眠的进程,可手动唤醒
D: uninterruptable sleeping,不可中断的睡眠得进程,只有在特定系统条件下才会被唤醒
T: stopped,停止态
Z: zombie,僵死态。详情见http://blog.csdn.net/qduningning/article/details/7983708。这个还蛮气人的,不过能解决还是出乎阿拉意料了。嘛,也是,Linux so 强大,怎么会解决不了这个呢?不存在的!http://www.cnblogs.com/Anker/p/3271773.html,怎么说呢,下面这篇更符合阿拉的文风,不要错过哟。
+: 前台进程(正在使用的)
l: 多线程进程
L:内存分页并带锁
N:低优先级进程
<: 高优先级进程
start:进程开始运行的时间
s: session leader,会话(子进程)发起者
ni: nice值,即nice优先级(进程优先级的概念大家可以自行搜索下,简单而言就是linux设定了哪些任务优先做,优先级可手动设定)
pri: priority 优先级
rtprio: 实时优先级
psr: processor CPU编号
BSD格式选项:
-ef -e: 显示所有进程 -f: 显示完整格式程序信息
-eFH 缩进显示子进程(-F: 显示更完整格式的进程信息 -H: 以进程层级格式显示进程相关信息)
-C 脚本名/命令名 显示某脚本
ps -C f1.sh o pid,%cpu,cmd 显示f1.sh脚本(脚本需加shebang)
ps -C ping 搜索ping命令进程
ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm
ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
Unix格式和BSD格式可以合起来用的,如上。
后面可指定显示的内容也是通用的。
ps后还可跟grep进行行内容过滤,这样就可以搜索相应的应用了。不过这里有个专门的命令实现此功能。此命令支持正则表达式哦。
Pgrep
-u uid: effective user,生效者
-U uid: real user,真正发起运行命令者
-t terminal: 与指定终端相关的进程
-l: 显示进程名
-a: 显示完整格式的进程名
-P pid: 显示指定进程的子进程
此外还有个按确切的程序名称的命令pidof:/sbin/pidofpidof bash
举个栗子:
搜索按root身份运行的命令(不加l只显示进程号) pgrep -lu root
搜索saber用户发起的进程 pgrep -lU saber
个人风格太重,希望不会影响到观感体验。>_<
欢迎提建议,不一定会改,但可以切磋之后也说不定。嘿,就这样了。
本文出自 “RightNow” 博客,请务必保留此出处http://amelie.blog.51cto.com/12850951/1963899