bash shell命令与监测的那点事之ps

  学习LInux,不得不谈谈bash shell命令,介绍Linux命令行与Shell脚本的书有很多很多,bash shell命令也有很多,此次我们只谈谈有关监测的事情。

探查进程

  当程序运行在系统上时,我们称之为进程。想监测这些进程,需要熟悉ps命令的用法,ps命令好比工具的瑞士军刀,它能输出运行在系统上的所有程序的许多信息。

  但是很蛋疼的是,随着它的稳健而来的是复杂性-数不清的参数,这或许让ps命令成为了最难掌握的命令。大多数系统管理员在掌握了能提供他们需要的一组参数后,就一直坚持只使用这组参数。默认情况下,ps命令并不会提供那么多的信息:

 [root@controller ~]# ps
PID TTY TIME CMD
pts/ :: bash
pts/ :: ps

  没什么特别的是吧?默认情况下,ps命令只会显示运行在当前控制台下的属于当前用户的进程,在此例中,我们只运行了bash shell(注:shell也只是运行在系统上的另一个程序而已),以及ps命令自己。

  上例中的基本输出显示了程序的进程号,(PID)、它们运行在哪个终端,以及进程已用的CPU时间。

  Linux系统中使用的GNU ps命令支持3个不同类型的命令行参数:

  • Unix风格的参数,前面加单破折线
  • BSD风格的参数,前面不加破折线
  • GNU风格的长参数,前面加双破折线

  下面将进一步解析这三种不同的参数类型,并举例演示它们如何工作。

Unix风格的参数

-A    显示所有进程
-N   显示与指定参数不符的所有进程
-a     显示除控制进程和无终端的进程外的所有进程
-d         显示除控制进程外的所有进程
-e   显示所有进程
-f 显示完整格式的输出
-F   显示更多的额外输出
-j 显示任务信息
-l 显示长列表
-H   用层级格式来显示进程(树状、用来显示父进程)

  以上介绍的是常用的Unix风格的参数,下面举几个栗子: 

 [root@controller ~]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root Jul22 ? :: /sbin/init
root Jul22 ? :: [kthreadd]
root Jul22 ? :: [migration/]
root Jul22 ? :: [ksoftirqd/]
root Jul22 ? :: [migration/]
root Jul22 ? :: [watchdog/]
root Jul22 ? :: [migration/]
root Jul22 ? :: [migration/]
root Jul22 ? :: [ksoftirqd/]
root Jul22 ? :: [watchdog/]
root Jul22 ? :: [migration/]
root Jul22 ? :: [migration/]
root Jul22 ? :: [ksoftirqd/]

  这个栗子中包含了两个参数:-e是指定显示所有运行在系统上的进程;-f是扩展了输出,这些扩展包含了以下信息:

  • UID:启动这些进程的用户。
  • PID:进程的进程号。
  • PPID:父进程的进程号。
  • C:进程生命周期中的CPU利用率。
  • STIME:进程启动时的系统时间。
  • TTY:进程启动时的终端设备。
  • TIME:运行进程需要的累计CPU时间。
  • CMD:启动的进程名称。

  如果想获得更多的参数,可以用-l参数,它会产生一个长格式的输出:

 [root@controller ~]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
S - wait pts/ :: bash
R - - pts/ :: ps
[root@controller ~]#

  使用-l后出现的新的参数如下:

  • F:内核分配给进程的系统标记。
  • S:进程的状态:0代表正在运行;S代表在休眠;R代表可运行,正等待运行;Z代表僵化,进程已结束但父进程已不存在;T代表停止。
  • PRI:进程的优先级(数字越大,代表优先级越低)。
  • NI:谦让度值用来参与决定优先级。
  • ADDR:进程的内存地址。
  • SZ:假如进程被换出,所需交换空间的大致大小。
  • WCHAN:进程休眠的内核函数地址。

BSD风格

  了解了Unix风格的参数后,我们一起看一下BSD风格的参数。BSD(伯克利软件发行版)是加州大学伯克利分校开发的一个Unix版本。它和AT&T Unix系统有许多细小的不同。

BSD风格的命令参数

T   显示当前终端关联的所有进程
a   显示跟任意终端关联的所有进程
g 显示所有进程,包括控制进程
r 仅显示运行中的进程
 j  显示任务信息
x 显示所有进程,甚至包括未分配任何终端的进程
l 采用长模式
e 显示命令使用的环境变量
f 用分层格式来显示进程,表明哪些进程启动了哪些进程
h 不显示头信息

  如你所见,Unix和BSD类型的参数有很多重叠的地方,所以大多数情况,你只要选择自己喜欢的格式的参数类型就行了。

  在使用BSD参数时,ps命令会自动改变输出以模仿BSD格式。下面举个栗子:

 [root@controller ~]# ps l
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
n_tty_ Ss+ tty2 : /sbin/mingetty /dev/tty2
n_tty_ Ss+ tty3 : /sbin/mingetty /dev/tty3
n_tty_ Ss+ tty4 : /sbin/mingetty /dev/tty4
n_tty_ Ss+ tty5 : /sbin/mingetty /dev/tty5
n_tty_ Ss+ tty6 : /sbin/mingetty /dev/tty6
poll_s Ss+ tty1 : /usr/bin/Xorg : -nr -verbose -audit -auth /var/run/gdm/auth-for-gdm-9L52AZ/database -nolisten tcp vt1
poll_s Ss+ tty7 : /usr/bin/Xorg : -br -verbose -audit -auth /var/run/gdm/auth-for-gdm-6RkbH9/database -nolisten tcp
poll_s Ss+ tty8 : /usr/bin/Xorg : -br -verbose -audit -auth /var/run/gdm/auth-for-gdm-zqkSTu/database -nolisten tcp
- R+ pts/ : ps l
wait Ss pts/ : -bash
[root@controller ~]#

  注意:大部分输出和使用Unix风格一样,但是有一小部分是不同的:

  • VSZ:进程在内存中的大小,以KB为单位。
  • RSS:进程在未换出时占用的物理内存。
  • STAT:代表当前进程状态的双字符状态码。

  在状态码中,BSD比Unix输出的信息更为详尽。第一个参数与Unix输出相同的值,但是第二个参数进一步说明进程的状态:

  • <:该进程运行在高优先级上。
  • N:该进程运行在低优先级上。
  • L:进程有页面锁定在内存中。
  • S:该进程是个控制进程。
  • l:该进程是多线程的。
  • +:该进程是运行在前端。

GNU全字参数

  最后,GNU开发人员在这个新的整合过的ps命令中加入了另外一些参数。一些GNU全字参数复制了现有的Unix或BSD类型的参数,而一些提供了新功能。下面列出了GNU的一些命令参数。

--deselect 显示所有进程,命令行中列出的进程
--contest 显示额外的安全信息
--cols n 将屏幕宽度设置为n列
--columns n 将屏幕宽度设置为n列
--cumulative 包含已停止的进程的信息
--forest 用层级结构显示出进程和父进程之间的关系
--headers 在每页输出中列出列的头
--lines n 将屏幕高设置为n行
 --rows  将屏幕设置为n排
sort order 指定将输出按哪列排序

  你可以将GNU全字参数和Unix或BSD风格混用来定制输出。GNU中最好用的莫过于--forest参数。它会显示进程的层级信息,并用ASCII字符绘出萌萌的图表:

 root           Aug01 ?        ::  \_ /usr/libexec/gdm-simple-slave --display-id /org/gnome/DisplayManager/Display2
root Aug01 tty7 :: | \_ /usr/bin/Xorg : -br -verbose -audit -auth /var/run/gdm/auth-for-gdm-6RkbH9/database -nolisten tcp
root Aug01 ? :: | \_ pam: gdm-password
root Aug01 ? :: | \_ gnome-session
root Aug01 ? :: | \_ metacity
root Aug01 ? :: | \_ gnome-panel
root Aug01 ? :: | \_ nautilus
root Aug01 ? :: | \_ gnome-power-manager
root Aug01 ? :: | \_ gnome-volume-control-applet
root Aug01 ? :: | \_ abrt-applet
root Aug01 ? :: | \_ python /usr/share/system-config-printer/applet.py
root Aug01 ? :: | \_ /usr/libexec/polkit-gnome-authentication-agent-

bash shell命令与监测的那点事(一)的更多相关文章

  1. bash shell命令与监测的那点事(三)

    bash shell命令与监测的那点事之df与du 前两篇介绍了bash shell的进程监控指令,但是有时候你需要知道在某个设备上还有多少磁盘空间.首先介绍df命令: df命令 df命令就是用来轻松 ...

  2. bash shell命令与监测的那点事(二)

    bash shell命令与监测的那点事之top 上次我们说到了ps命令,ps命令虽然在收集运行在系统上的进程信息很有用,但是也有不足之处,ps命令只能显示某个特定时间点的信息,如果你想观察频繁换进换出 ...

  3. bash shell命令(2)

    在上篇<bash shell命令(1)>中,介绍了几种简单的linux shell命令,今天继续介绍bash shell命令 本文地址:http://www.cnblogs.com/arc ...

  4. 第四章:更多的bash shell命令

    第四章:更多的bash shell命令 监测程序 ps (其他ps内容见#1 ) Unix风格的ps命令参数 参数 描述 -A 显示所有进程 -N 显示与指定参数不符的所有进程 -a 显示除控制进程( ...

  5. ipython, 一个 python 的交互式 shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多很有用的功能和函数

    一个 python 的交互式 shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多很有用的功能和函数. 若用的是fish s ...

  6. 《Linux命令行与shell脚本编程大全》- 读书笔记2 - 更多的bash shell命令

    更多的bash shell命令 想检测进程,需要熟悉ps命令的用法.ps命令好比工具中的瑞士军刀,它能输出运行在系统上的所有程序的许多信息.默认情况下,ps命令只会显示运行在当前控制台下的属于当前用户 ...

  7. 基本bash shell命令

    以下列举一些常用的bash shell命令,在使用时方便查找. 访问Linux系统上的手册:man 命令.例:man ps      手册是由分页程序来显示的,可以通过点击 空格,回车,向上和向下箭头 ...

  8. 一、基本的bash shell命令(基于Ubuntu实现)

    一.基本的bash shell命令(基于Ubuntu实现) /etc/passwd文件包含了所有系统用户账户列表以及每个用户的基本配置信息. man命令 在想要查找的工具的名称前输入man命令,就可以 ...

  9. 基本的bash shell命令

    目录 基本的bash shell命令 启动shell shell提示符 基本的bash shell命令 启动shell GNU bash shell 能提供对Linux系统的交互式访问.它是作为普通程 ...

随机推荐

  1. Wince 6.0获取设备的分辨率 自动设置窗体位置

    调用微软提供给wince的API  “coredll.dll” [DllImport("coredll.dll")] public static extern int GetSys ...

  2. Dll注入:X86/X64 远程线程CreateRemoteThread 注入

    远线程注入原理是利用Windows 系统中CreateRemoteThread()这个API,其中第4个参数是准备运行的线程,我们可以将LoadLibrary()填入其中,这样就可以执行远程进程中的L ...

  3. Unity结合Flask实现排行榜功能

    业余做的小游戏,排行榜本来是用PlayerPrefs存储在本地,现在想将数据放在服务器上.因为功能很简单,就选择了小巧玲珑的Flask来实现. 闲话少叙.首先考虑URL的设计.排行榜无非是一堆分数sc ...

  4. 【转】VS2010发布、打包安装程序(超全超详细)

    1. 在vs2010 选择“新建项目”→“ 其他项目类型”→“ Visual Studio Installer→“安装项目”: 命名为:Setup1 . 这是在VS2010中将有三个文件夹, 1.“应 ...

  5. 手机上如何远程控制Linux服务器?

    这里介绍3个手机软件,分别是JuiceSSH.Termius和Termux,这3个软件都可以实现远程控制Linux服务器(相当于手机SSH客户端),而且使用起来都非常方便,下面我简单介绍一下这3个软件 ...

  6. linux用命令行运行matlab的.mat文件

    入m文件所在目录后,运行 $ matlab -nodesktop -nosplash -r matlabfile 只用文件名matlabfile,不能添加.m

  7. 漫谈 Clustering (3): Gaussian Mixture Model

    上一次我们谈到了用 k-means 进行聚类的方法,这次我们来说一下另一个很流行的算法:Gaussian Mixture Model (GMM).事实上,GMM 和 k-means 很像,不过 GMM ...

  8. tomcat服务器用Servlet类查找磁盘文件上的Json信息,如果匹配则在浏览器上显示出该条内容的全部信息

    package com.swift; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOE ...

  9. Linux网络编程之"获取网络天气信息"

    需求分析: 1.需要Linux c 网络编程基础, 2.需要了解 http 协议 3.需要天气信息相关api(可以从阿里云上购买,很便宜的!) 4.需要cJSON解析库(因为获取到的天气信息一般是用c ...

  10. linux 下备份mysql数据库

    今天老板让备份数据库没办法自己折腾吧,下面把折腾的结果总结总结. 数据库备份思路: 1.编写脚本 2.执行脚本  哈哈,是不是很简单,打开冰箱,放入大象,关上.下面我是具体操作. 一.编写脚本 1.设 ...