1.命令基本介绍

man ps
ps - report a snapshot of the current processes.

    ps命令用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等。



2.常用选项

-A:显示所有程序。与 -e 具有同样的效用。
-e:此选项的效果和指定"A"选项相同。
-f:显示UID,PPIP,C与STIME栏位。
a:显示现行终端机下的所有程序,包括其他用户的程序。
u:以用户为主的格式来显示程序状况。
x:显示所有程序,不以终端机来区分。



3.常用命令

3.1 ps aux

ps aux详解:是用BSD的格式来显示
USER  PID %CPU %MEM  VSZ  RSS  TTY   STAT START   TIME COMMAND


 USER:该进程的属组。
 PID :该进程的进程ID号。
 %CPU:该进程占用的CPU 资源百分比。
 %MEM:该进程所占用的物理内存百分比。
 VSZ :该进程使用掉的虚拟内存量 (Kbytes)
 RSS :该进程占用的固定的内存量 (Kbytes)
 TTY :该进程是在那个终端机上面运作,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
 STAT:该程序目前的状态,主要的状态有:
   D :不可中断 uninterruptible sleep (usually IO)
   R :运行 runnable。该程序目前正在运作,或者是可被运作;
   S :中断 sleeping。该程序目前正在睡眠当中 ,但可被某些讯号(signal) 唤醒。
   T :停止 traced or stopped。该程序目前正在侦测或者是停止了;
   Z :僵死 a defunct (”zombie”) process。该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态
 START:该进程被触发启动的时间;
 TIME :该进程实际使用 CPU 运作的时间。
 COMMAND:该程序的实际命令。


3.2 ps -ef

ps -ef 详解:标准的格式显示进程的
UID        PID  PPID  C STIME TTY          TIME CMD

UID     用户ID、但输出的是用户名 
PID     进程的ID 
PPID    父进程ID 
C       进程占用CPU的百分比 
STIME   进程启动到现在的时间 
TTY     该进程在那个终端上运行,若与终端无关,则显示? 若为pts/0等,则表示由网络连接主机进程。 
CMD     命令的名称和参数


3.3 查看占用CPU最高的进程

ps aux|head -1;ps aux|grep -v PID|sort -rn -k 3|head


3.4 查看占用内存最高的进程

ps aux|head -1;ps aux|grep -v PID|sort -rn -k 4|head


解释:
ps aux|head -1:得到头
ps aux|grep -v PID :查看进程
sort -rn -k 4|head:以第四列的数值大小进行逆序排列(默认从小到大)


3.5 查看某个用户起的进程

ps -fu root         #root表示用户


3.6 查看僵尸进程

linux系统上:
ps -ef | grep defunct     #查看命令

另外可以使用top命令查看
top
Tasks:  95 total,   1 running,  94 sleeping,   0 stopped,   0 zombie

ps -ef | grep defunct | grep -v grep | wc -l   #统计所有的僵尸进程



solaris系统上:
a)确定僵尸进程
ps -efo uid,pid,ppid,pcpu,pmem,vsz,rss,osz,etime,stime,s,comm | grep Z
或者 ps -ef | grep defunct | more
b)确定僵尸进程启动时间
ps -efo uid,pid,ppid,pcpu,pmem,vsz,rss,osz,etime,stime,s,comm | grep 20396  (进程号)


3.7 查看进程启动时间与运行时间

ps -eo pid,user,lstart,etime,comm,args

pid:进程ID
user:用户
lstart:启动时间
etime:运行时间
comm:命令
args:命令详细参数


3.8 通过ansible管理查看远程主机上某用户运行的程序

cat checkproc.yml
 
---
- name: check remote  proc
  hosts: linux
  remote_user: root
  gather_facts: false
     
  tasks:
    - name: check proc
      shell: ps -ef | grep -v grep | grep apache | wc -l
      register: proccount
    - name: see the pro
      fail:
        msg: "apache user exist process!"
      when: pscount.stdout != "0"
 
 
ansible-playbook -i hosts checkproc.yml


3.9 通过ansible管理删除远程主机上某用户运行的程序

[root@localhost ansible]# cat kill.sh 
#!/bin/bash

ps -ef | grep -v grep | grep nxy | awk '{print $2}' | xargs kill 



[root@localhost ansible]# ls
ansible.cfg  hosts  hosts.20170605bak  kill.sh  roles


[root@localhost ansible]# ansible  -i hosts node2 -m script -a "/etc/ansible/kill.sh"