ps指令详解

ps aux       #显示出系统上的全部进程
ps -ef        #显示出系统上的全部进程,且显示出PPID一栏
ps -ljF       #仅显示与本终端上开启的进程

选项:
-t 终端名称1 终端名称2        #指定关联的多个终端,只会列出指定终端的进程
#/dev/目录下保存的是系统中所有的设备文件,而在图形桌面环境下启动的虚拟终端所对应的设备文件都保存在/dev/pts目录下。数字l表示第一个启动的虚拟终端,2表示第二个启动的虚拟终端,以此类推。
#这里为选项-t指定了参数/dev/pts/1,说明希望列出所有关联到虚拟终端l的进程

-p PID1 PID2…          #指定想列出的PID列表,只会列出指定pid的进程
注意:多个PID可以使用空格分开,也可使用逗号分开

-u UID1 UID2… #仅列出指定用户的进程,可用用户名替代UID
注意,这里说的是有效用户UID或用户名(Effective User ID or Effective User Name),而不是实际用户ID或用户名,两者是有很大区别的:实际用户UID或用户名只是标识了哪个用户创建了这个进程,而不会指定进程的文件访问权限;而有效用户UID或用户名的意思是进程使用这个用户的文件访问权限作为进程本身的文件访问权限。
对于普通程序来说,有效用户UID或用户名与实际用户UID或用户名是相同的,只有对那些设置了set-uid的程序来说,有效用户ID或用户名才会发生改变,也就是说,实际用户ID不等于有效用的ID。

-C        可执行文件名称(ps指令最后一列CMD) 在一个用apache搭建的web服务器上,如何查看系统当前运行的所有apache进程?
例如:ps -C sshd
如果进程的TTY终端项显示的都是问号?说明这些进程都没有关联到任何终端。在Unix/Linux的世界里,要求所有的"网络服务进程"都不能关联到任何一个终端,这里也验证了这一点。

其他常用选项:

a      显示系统中所有用户的进程。
x        显示没有控制终端的进程及后台进程
r      显示正在运行的进程
u        以用户为主的格式来显示程序状况

-A      显示主机上所有进程,等同于-e选项
-e      此参数的效果和指定"A"参数相同。显示所有进程

e           列出程序时,显示每个程序所使用的环境变量。
f      用ASCII字符显示树状结构,表达程序间的相互(父子)关系。
-f      全格式显示(列出进程间父子关系)
-l      按长格式显示

-L      打印出线程的ID和线程的个数,

-N     显示所有的程序,除了执行ps指令终端机下的程序之外。
s      采用程序信号的格式显示程序状况。
S      列出程序时,包括已中断的子程序资料。

"-o" 参数表示以用户自定义的格式输出
  "psr" 表示当前分配给进程运行的处理器编号
  "lwp" 表示线程的ID,
  "ruser" 表示运行进程的用户,
  "pid" 表示进程的ID ,
  "ppid " 表示父进程的ID ,
  "args" 表示运行的命令行及其参数

ps -eLo psr,lwp,ruser,pid,ppid,args

-ef或-eF 通常一起使用
aux 通常一起使用,显示比-ef更全面的信息
这两个通常可以配合-L 参数使用,将线程及线程个数显示出来,通常是-eLf 或-eLF 当然也可以 aux -L

[root@kvm ~]# ps |head
PID TTY TIME CMD
27939 pts/0 00:00:00 bash
29031 pts/0 00:02:33 qemu-system-x86
29324 pts/0 00:00:00 ps
29325 pts/0 00:00:00 head

[root@kvm ~]# ps a |head
PID TTY STAT TIME COMMAND
2037 tty1 Ss+ 0:00 /sbin/mingetty /dev/tty1
2039 tty2 Ss+ 0:00 /sbin/mingetty /dev/tty2
2041 tty3 Ss+ 0:00 /sbin/mingetty /dev/tty3
2043 tty4 Ss+ 0:00 /sbin/mingetty /dev/tty4
2045 tty5 Ss+ 0:00 /sbin/mingetty /dev/tty5
2047 tty6 Ss+ 0:00 /sbin/mingetty /dev/tty6
27939 pts/0 Ss 0:00 -bash
27961 pts/1 Ss+ 0:00 -bash
.....

[root@kvm ~]# ps u |head
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 2037 0.0 0.0 4068 452 tty1 Ss+ Jun11 0:00 /sbin/mingetty /dev/tty1
root 2039 0.0 0.0 4068 452 tty2 Ss+ Jun11 0:00 /sbin/mingetty /dev/tty2
root 2041 0.0 0.0 4068 452 tty3 Ss+ Jun11 0:00 /sbin/mingetty /dev/tty3
root 2043 0.0 0.0 4068 452 tty4 Ss+ Jun11 0:00 /sbin/mingetty /dev/tty4
root 2045 0.0 0.0 4068 452 tty5 Ss+ Jun11 0:00 /sbin/mingetty /dev/tty5
root 2047 0.0 0.0 4068 452 tty6 Ss+ Jun11 0:00 /sbin/mingetty /dev/tty6
root 27939 0.0 0.0 108360 1836 pts/0 Ss 09:05 0:00 -bash
root 27961 0.0 0.0 108360 1828 pts/1 Ss+ 09:05 0:00 -bash
......

[root@kvm ~]# ps x |head
PID TTY STAT TIME COMMAND
1 ? Ss 0:05 /sbin/init
2 ? S 0:00 [kthreadd]
3 ? S 0:02 [migration/0]
4 ? S 0:02 [ksoftirqd/0]
5 ? S 0:00 [stopper/0]
6 ? S 0:01 [watchdog/0]
7 ? S 0:07 [migration/1]
8 ? S 0:00 [stopper/1]
9 ? S 0:03 [ksoftirqd/1]
.......

[root@kvm ~]# ps aux |head
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 19368 1060 ? Ss Jun11 0:05 /sbin/init
root 2 0.0 0.0 0 0 ? S Jun11 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S Jun11 0:02 [migration/0]
root 4 0.0 0.0 0 0 ? S Jun11 0:02 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S Jun11 0:00 [stopper/0]
root 6 0.0 0.0 0 0 ? S Jun11 0:01 [watchdog/0]
root 7 0.0 0.0 0 0 ? S Jun11 0:07 [migration/1]
root 8 0.0 0.0 0 0 ? S Jun11 0:00 [stopper/1]
root 9 0.0 0.0 0 0 ? S Jun11 0:03 [ksoftirqd/1]

[root@kvm ~]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Jun11 ? 00:00:05 /sbin/init
root 2 0 0 Jun11 ? 00:00:00 [kthreadd]
root 3 2 0 Jun11 ? 00:00:02 [migration/0]


C        #占用的CPU百分比
STIME      #程序启动时间

USER      #用户名

UID        #用户ID(User ID)
PID        进程ID(Process ID)
PPID         父进程的进程ID(Parent Process id)
SID        会话ID(Session id)
LWP        线程号(即线程的pid)
NLWP      线程的个数

PSR       进程使用的处理器,在多处理器上可以体现出来(即进程在哪个CPU上运行)

%CPU        进程的cpu占用率
%MEM        进程的内存占用率
VSZ        进程所使用的虚存的大小(Virtual Size)
SZ        进程用到的swap的量,这是一个粗略计算;
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 内存页面被锁定
  s 创建回话的进程,进程的领导者(在它之下有子进程);
  l 多线程进程(使用 CLONE_THREAD, 类似 NPTL pthreads)
  + 是一个前台进程组


START        进程启动时间和日期
TIME       进程使用的总cpu时间,即进程已经执行的时间
COMMAND      正在执行的命令行命令
NI          优先级(Nice)
PRI          进程优先级编号(Priority)
WCHAN      目前这个程序是否正在运作当中,若为 - 表示正在运作,若进程正在睡眠,则显示睡眠的内核函数名称;该函数的名称是从/root/system.map文件中获得的。
FLAGS      与进程相关的数字标识

原文地址:https://www.cnblogs.com/wyzhou/p/10402081.html