ps命令详解
有时候系统管理员可能只关⼼现在系统中运⾏着哪些程序,⽽不想知道有哪些进程在运⾏。由于⼀个应⽤程序可能需要启动多个进程。所以在同等情况下,进程的数量要⽐程序多的多。为此从阅读⽅⾯考虑,管理员需要知道系统中运⾏的具体程序。要实现这个需求的话,就需要利⽤命令ps来帮忙。
要对进程进⾏监测和控制,⾸先必须要了解当前进程的情况,也就是需要查看当前进程,⽽ ps 命令就是最基本同时也是⾮常强⼤的进程查看命令。使⽤该命令可以确定有哪些进程正在运⾏和运⾏的状态、进程是否结束、进程有没有僵死、哪些进程占⽤了过多的资源等等。总之⼤部分信息都是可以通过执⾏该命令得到的。
>>>>>>>>>>>>
名称:ps
使⽤权限:所有使⽤者
使⽤⽅式:ps [options] [--help]
说明:显⽰瞬间⾏程 (process) 的动态
参数:ps的参数⾮常多, 在此仅列出⼏个常⽤的参数并⼤略介绍含义
-A    列出所有的进程
-w    显⽰加宽可以显⽰较多的资讯
-au    显⽰较详细的资讯
-aux    显⽰所有包含其他使⽤者的⾏程
>>>>>>>>>>>>
常⽤参数:
-A 显⽰所有进程(等价于-e)(utility)
-a 显⽰⼀个终端的所有进程,除了会话引线
-N 忽略选择。
-d 显⽰所有进程,但省略所有的会话引线(utility)
-
x 显⽰没有控制终端的进程,同时显⽰各个命令的具体路径。dx不可合⽤。(utility)
-p pid 进程使⽤cpu的时间
-u uid or username 选择有效的⽤户id或者是⽤户名
-g gid or groupname 显⽰组的所有进程。
U username 显⽰该⽤户下的所有进程,且显⽰各个命令的详细路径。如:ps U zhang;(utility)
-f 全部列出,通常和其他选项联⽤。如:ps -fa or ps -fx and so on.
-l 长格式(有F,wchan,C 等字段)
-j 作业格式
-o ⽤户⾃定义格式。
v 以虚拟存储器格式显⽰
s 以信号格式显⽰
-
m 显⽰所有的线程
-H 显⽰进程的层次(和其它的命令合⽤,如:ps -Ha)(utility)
e 命令之后显⽰环境(如:ps -d e; ps -a e)(utility)
h 不显⽰第⼀⾏
>>>>>>>>>>>>
ps命令常⽤⽤法(⽅便查看系统进程)
1)ps a 显⽰现⾏终端机下的所有程序,包括其他⽤户的程序。
2)ps -A 显⽰所有进程。
3)ps c 列出程序时,显⽰每个程序真正的指令名称,⽽不包含路径,参数或常驻服务的标⽰。
4)ps -e 此参数的效果和指定"A"参数相同。
5)ps e 列出程序时,显⽰每个程序所使⽤的环境变量。
6)ps f ⽤ASCII字符显⽰树状结构,表达程序间的相互关系。
7)ps -H 显⽰树状结构,表⽰程序间的相互关系。
8)ps -N 显⽰所有的程序,除了执⾏ps指令终端机下的程序之外。
9)ps s 采⽤程序信号的格式显⽰程序状况。
10)ps S 列出程序时,包括已中断的⼦程序资料。
11)ps -t<;终端机编号>  指定终端机编号,并列出属于该终端机的程序的状况。
12)ps u  以⽤户为主的格式来显⽰程序状况。
13)ps x  显⽰所有程序,不以终端机来区分。
最常⽤的⽅法是ps -aux,然后再利⽤⼀个管道符号导向到grep去查特定的进程,然后再对特定的进程进⾏操作。
>>>>>>>>>>>>
运⾏ ps aux 的到如下信息:
root:# ps aux
USER      PID      %CPU    %MEM    VSZ    RSS    TTY    STAT    START    TIME    COMMAND
smmsp    3521    0.0    0.7    6556    1616    ?    Ss    20:40    0:00    sendmail: Queue runner@01:00:00 f
root    3532    0.0    0.2    2428    452    ?    Ss    20:40    0:00    gpm -m /dev/input/mice -t imps2
htt    3563    0.0    0.0    2956    196    ?    Ss    20:41    0:00    /usr/sbin/htt -retryonerror 0
htt    3564    0.0    1.7    29460    3704    ?    Sl    20:41    0:00    htt_server -nodaemon
root    3574    0.0    0.4    5236    992    ?    Ss    20:41    0:00    crond
xfs    3617    0.0    1.3    13572    2804    ?    Ss    20:41    0:00    xfs -droppriv -daemon
root    3627    0.0    0.2    3448    552    ?    SNs    20:41    0:00    anacron -s
root    3636    0.0    0.1    2304    420    ?    Ss    20:41    0:00    /usr/sbin/atd
dbus    3655    0.0    0.5    13840    1084    ?    Ssl    20:41    0:00    dbus-daemon-1 --system
Head标头:
USER    ⽤户名
UID    ⽤户ID(User ID)
PID    进程ID(Process ID)
PPID    ⽗进程的进程ID(Parent Process id)
SID    会话ID(Session id)
%CPU    进程的cpu占⽤率
%MEM    进程的内存占⽤率
VSZ    进程所使⽤的虚存的⼤⼩(Virtual Size)
RSS    进程使⽤的驻留集⼤⼩或者是实际内存的⼤⼩,Kbytes字节。
TTY    与进程关联的终端(tty)
STAT    进程的状态:进程状态使⽤字符表⽰的(STAT的状态码)
R 运⾏    Runnable (on run queue)            正在运⾏或在运⾏队列中等待。
S 睡眠    Sleeping                休眠中, 受阻, 在等待某个条件的形成或接受到信号。
I 空闲    Idle
Z 僵死    Zombie(a defunct process)        进程已终⽌, 但进程描述符存在, 直到⽗进程调⽤wait4()系统调⽤后释放。
D 不可中断    Uninterruptible sleep (ususally IO)    收到信号不唤醒和不可运⾏, 进程必须等待直到有中断发⽣。
T 终⽌    Terminate                进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停⽌运⾏运⾏。
P 等待交换页
W ⽆驻留页    has no resident pages        没有⾜够的记忆体分页可分配。
X 死掉的进程
< ⾼优先级进程⾼优先序的进程
N 低优先级进程低优先序的进程
L 内存锁页    Lock                有记忆体分页分配并缩在记忆体内
s 进程的领导者(在它之下有⼦进程);
l 多进程的(使⽤ CLONE_THREAD, 类似 NPTL pthreads)
+ 位于后台的进程组
START    进程启动时间和⽇期
TIME    进程使⽤的总cpu时间
COMMAND    正在执⾏的命令⾏命令
NI    优先级(Nice)
PRI    进程优先级编号(Priority)
WCHAN    进程正在睡眠的内核函数名称;该函数的名称是从/root/system.map⽂件中获得的。
FLAGS    与进程相关的数字标识
>>>>>>>>>>>>
例⼦:
sort命令排序查看当前系统进程的uid,pid,stat,pri, 以uid号排序.
ps -eo pid,stat,pri,uid –sort uid
查看当前系统进程的user,pid,stat,rss,args, 以rss排序.
ps -eo user,pid,stat,rss,args –sort rss
>>>>>>>>>>>>
ps 为我们提供了进程的⼀次性的查看,它所提供的查看结果并不动态连续的;如果想对进程时间监控,应该⽤ top ⼯具。
1、ps 的参数说明:
ps 提供了很多的选项参数,常⽤的有以下⼏个:
l 长格式输出;
u 按⽤户名和启动时间的顺序来显⽰进程;
j ⽤任务格式来显⽰进程;
f ⽤树形格式来显⽰进程;
a 显⽰所有⽤户的所有进程(包括其它⽤户);
x 显⽰⽆控制终端的进程;
r 显⽰运⾏中的进程;
ww 避免详细参数被截断;
我们常⽤的选项是组合是 aux 或 lax,还有参数 f 的应⽤。
2、ps aux 或 lax 输出的解释:
USER 进程的属主;
PID 进程的ID;
PPID ⽗进程;
%CPU 进程占⽤的CPU百分⽐;
%MEM 占⽤内存的百分⽐;
NI 进程的NICE值,数值⼤,表⽰较少占⽤CPU时间;
VSZ 进程虚拟⼤⼩;
RSS 驻留中页的数量;
TTY 终端ID
STAT 进程状态(有以下⼏种)
D ⽆法中断的休眠状态(通常 IO 的进程);
R 正在运⾏可中在队列中可过⾏的;
S 处于休眠状态;
T 停⽌或被追踪;
W 进⼊内存交换(从内核2.6开始⽆效);
X 死掉的进程(从来没见过);
Z 僵⼫进程;
< 优先级⾼的进程
N 优先级较低的进程
L 有些页被锁进内存;
s 进程的领导者(在它之下有⼦进程);
l 多进程的(使⽤ CLONE_THREAD, 类似 NPTL pthreads);
+ 位于后台的进程组;
WCHAN 正在等待的进程资源;
START 启动进程的时间;
TIME 进程消耗CPU的时间;
COMMAND 命令的名称和参数;
3、应⽤举例:
[root@localhost ~]# ps -aux |more
可以⽤ | 管道和 more 连接起来分页查看。
[root@localhost ~]# ps -aux >
把结果输出到⽂本中并保存。
[root@localhost ~]#
这⾥是把所有进程显⽰出来,并输出到⽂件,然后再通过more 来分页查看。
4、kill 终⽌(杀死)进程,有⼗⼏种控制进程的⽅法,下⾯是⼀些常⽤的⽅法:
[root@localhost ~]#kill -STOP [pid]
发送SIGSTOP (17,19,23)停⽌⼀个进程,⽽并不消灭这个进程。
[root@localhost ~]#kill -CONT [pid]
发送SIGCONT (19,18,25)重新开始⼀个停⽌的进程。
[root@localhost ~]#kill -KILL [pid]
发送SIGKILL (9)强迫进程⽴即停⽌,并且不实施清理操作。
[root@localhost ~]#kill -9 -1
终⽌你拥有的全部进程。
SIGKILL 和 SIGSTOP 信号不能被捕捉、封锁或者忽略,但是,其它的信号可以。所以这是你的终极武器。
>>>>>>>>>>>>
利⽤ps命令向管理员报告执⾏中的程序:
有时候系统管理员可能只关⼼现在系统中运⾏着哪些程序,⽽不想知道有哪些进程在运⾏。由于⼀个应⽤程序可能需要启动多个进程。所在在同等情况下,进程的数量要⽐程序多的多。为此从阅读⽅⾯考虑,管理员需要知道系统中运⾏的具体程序。要实现这个需求的话,就需要利⽤命令ps来帮忙。
⼀、ps命令显⽰结果的含义。
当需要查看系统中执⾏的程序时,虽然ps 命令不是唯⼀的命令,但绝对是使⽤的最频繁的命令。如下图所⽰,就是执⾏ps命令后显⽰的结果。
在命令⾏中输⼊命令ps,就可以显⽰系统中当前运⾏的所有应⽤程序。如上图所⽰,如果输⼊ps命令,其显⽰结果主要有四部分内容。⾸先是PID,这是程序的ID号。才作系统就是利⽤这个ID号来唯⼀的标识应⽤程序,⽽不是利⽤命令来辨认。当需要强制关闭应⽤程序时,就需要⽤到这个PID号码。其次是 TTY,这个字段表⽰⽤户使⽤的终端代码。Pts表⽰⽤户是采⽤远程登录的。第三个参数TIME表⽰这个程序所消耗的CPU时间,注意这个时间不是程序开始运⾏的时间。最后⼀个参数CMD就表⽰程序的名字。
⼆、让系统报告详细的信息。
在使⽤ps命令时,如果不采⽤任何的可选项,则其显⽰的信息是⾮常有限的,⽽且往往只显⽰当前⽤户所运⾏的程序。当系统管理员需要知道应⽤程序更加详细的运⾏信息时,如想要知道这个应⽤程序内存、CPU的占⽤率情况时,那么就需要加⼊⼀些可选项。如系统管理员需要⼀并查看其它⽤户所执⾏的应⽤程序时,就需要在这个命令后⾯采⽤可选项-al。如此的话,系统会列出系统中所有⽤户运⾏的所有程序。如想要知道某个程序CPU与内存的使⽤情况,⽽不是只简单的现实其CPU的使⽤时间,那么就需要在这个命令后⾯加⼊参数-l ,即使⽤ps –l 命令可以让系统显⽰出应⽤程序的详细运⾏信息。关于上⾯各个字段所代表的含义,⼤家若有兴趣的话可以查看相关的帮助。⼀般来说,系统管理员关⼼的只是程序的PID号码、内存与CPU的使⽤率、命令的名字、⽤户采⽤的终端等等。其它的信息对于系统管理员来说价值不是很⼤。
三、查看后台运⾏的程序。
默认情况下,ps命令只显⽰前台运⾏的程序,⽽不会显⽰后台运⾏的程序。但是并⾮所有的程序都是在前台运⾏。正常情况下,隐藏在后台运⾏的程序数量要⽐前台运⾏的程序多的多。如随着操作系统启动⽽启动的不少系统⾃带程序,其运⾏的⽅式都是后台运⾏。⽽且有时候,系统出现问题往往是由于后台程序所造成的。如常见的⽊马等程序都是在后台所运⾏的。为此系统管理员相对来说,更加想要知道在后台运⾏着哪些程序。
如果要查看后台运⾏的程序,那就⽐较复杂⼀点。因为在不同版本的Linux操作系统中,要显⽰后台进程其所采⽤的可选项是不同的。如在红帽⼦ Linux操作系统中,其实采⽤参数的形式⽽不是可选项。即采⽤ps aux命令可以显⽰出所有的应⽤程序(包括前台与后台的)。参数与可选项的差异主要在前⾯⼜没有这个-符号。如果带有这个符号的就表⽰这是⼀个可选项。⽽如果不带的,就表⽰这事⼀个参数。这个符号⼀般情况下可不能够省。在该写的地⽅没写,或者不需要些的地⽅偏偏加上了,则系统都会提⽰错误信息,说不到这个命令。⽽在其它的Linux系统版本中,可能不能够识别这个aux参数。如在⼀些Linux操作系统版本中,需要采⽤-a可选项来完成这个任务。由于系统版本之间的差异,给系统管理员带来了不少的⿇烦。不过值得庆幸的是,各个操作系统版本中都有在线的帮助。如果系统管理员在使⽤⼀个新版本的操作系统时,不知道要显⽰全部进程该使⽤哪个可选项时,可以利⽤ps --heip等命令来查看系统帮助。不过美中不⾜的是,系统在线帮助都是英⽂的,对系统管理员的英⽂⽔平是⼀个不⼩的考验。不过如果要作Linux系统管理员,这点英⽂底⼦还是要有的。因为最新的Linux技术基本上都是先出来英⽂⽂档的。其实要掌握最先进的操作系统书籍,⼤部分的计算机书籍都是英⽂的。
四、对程序列表进⾏排序。
当运⾏的应⽤程序⽐较多时,系统管理员需要对应⽤程序进⾏排序。Ps命令的排序功能是⽐较强的。主要是因为这个命令有⼀个--sort参数(注意在这个参数前⾯采⽤的是两个⼩横杆符号,各位读者不要以为是笔者写错了)。在这个参数后⾯加上系统管理员想要的排序字段,就可以进⾏排序了。如这个命令
ps –A --sort cmd,就表⽰显⽰系统所有的应⽤程序,并根据程序命令来进⾏排序。在Linux操作系统参数中,还有⼀个⽐较⿇烦的事情,就是参数⼤⼩写不同往往代表着不同的含义。如上⾯这个命令,将⼤写字母A换成是⼩写字符a,则结果就完全两样了。⼤写字符A表⽰所有的应⽤程序,⽽⼩写字符a则表⽰“all w/ tty except session leaders”。两者有本质的区别。通过这个差异可以⽤来过滤不同终端登陆帐户所运⾏的应⽤程序。
在ps命令中,不少参数都有这种情况。运⾏ps --help查看这个命令的所有参数,就可以看到类似的⼤⼩写不同代表不同含义的情况还有很多。如⼤写字符O与⼩写字符o、⼤写字符U与⼩写字符u等等。这些差异⽆形之中增加了系统管理员维护操作系统的难度。系统管理员要掌握这么多的参数以及参数⼤⼩写之间的差异,往往是不可能的。系统管理员除了平时要多使⽤使⽤常⽤的参数来增加值观的印象,这个系统命令的在线帮助确实也是少不了的。这个系统帮助可以给管理员使⽤系统命令提供在线的指导。
五、报告特定程序的运⾏情况。
当系统中运⾏的程序⽐较多时,通过对程序名字排序可以帮助管理员到⾃⼰所关⼼的程序。但是这仍然不是最简便的⽅式。如现在系统管理员在其它操作系统中发现有⼀个叫做threadx 的⽊马程序在系统后台运⾏。为此管理员需要在其它电脑上查看是否也有这个⽊马程序在运⾏。此时该如何处理呢?利
⽤排序功能,对程序的名字进⾏排序(注意不是对程序的PID进⾏排序,因为即使程序相同,启动的时间不同或者操作系统中已经启动程序的数量不同,这个PID号码也就不同。也就是说这个PID号码是⾃动⽣成的)。这在⼀定程度上可以帮助管理员加快程序查的速度。不过笔者认为,如果系统管理员能够使⽤管道符与 grep等查询命令可能会更快的到⾃⼰所需要的应⽤程序信息。
如现在系统管理员若使⽤这个命令ps aux |grep “threadx”,会出现什么情况呢?⾸先系统会列出当前系统中所有运⾏的应⽤程序(包括前台运⾏与后台运⾏的)。然后将输出的结果通过管道符号|传递给命令grep。然后命令grep就会在ps命令输出的结果中查是否有threadx这个程序运⾏的信息。如果有的话,则会在窗⼝中显⽰这个程序的信息,⽽过滤掉其它应⽤程序的运⾏信息。可见采⽤管道符跟其它查询命令结合,可以帮助系统管理员在最短的时间内到⾃⼰想了解的应⽤程序的信息。
跟⼀些特殊符号结合还可以实现⼀些更加负责的功能。如跟cat命令结合使⽤可以统计出符合条件的程序数量。如在命令后⾯加⼊>符号,可以将输出的结果定位到⼀个⽂件中。如跟通配符结合使⽤,可以查询出满⾜特定条件的⼀类程序。如还可以查询出某个程序⽗程序或者其⼦程序的运⾏信息等等。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。

发表评论