ps 进程管理命令

ps命令很强大!

Posted by Lerko on December 18, 2016

查看所有用户的进程

ps aux

ps aux | grep [key] 可以进行筛选

一些基本用法

    ps a 显示现行终端机下的所有程序,包括其他用户的程序。 
    ps -A 显示所有程序。 
    ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。 
    ps -e 此参数的效果和指定"A"参数相同。 
    ps e 列出程序时,显示每个程序所使用的环境变量。 
    ps f 用ASCII字符显示树状结构,表达程序间的相互关系。 
    ps -H 显示树状结构,表示程序间的相互关系。 
    ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。 
    ps s 采用程序信号的格式显示程序状况。 
    ps S 列出程序时,包括已中断的子程序资料。 
    ps -t<终端机编号> 指定终端机编号,并列出属于该终端机的程序的状况。 
    ps u 以用户为主的格式来显示程序状况。 
    ps x 显示所有程序,不以终端机来区分。

下面是一个例子

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0 121764  5856 ?        Ss   09:59   0:01 /sbin/init splash
root         2  0.0  0.0      0     0 ?        S    09:59   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    09:59   0:00 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<   09:59   0:00 [kworker/0:0H]
root         7  0.1  0.0      0     0 ?        S    09:59   0:04 [rcu_sched]
root         8  0.0  0.0      0     0 ?        S    09:59   0:00 [rcu_bh]
root         9  0.0  0.0      0     0 ?        S    09:59   0:00 [migration/0]
root        10  0.0  0.0      0     0 ?        S    09:59   0:00 [watchdog/0]
root        11  0.0  0.0      0     0 ?        S    09:59   0:00 [watchdog/1]
root        12  0.0  0.0      0     0 ?        S    09:59   0:00 [migration/1]
root        13  0.0  0.0      0     0 ?        S    09:59   0:00 [ksoftirqd/1]
root        15  0.0  0.0      0     0 ?        S<   09:59   0:00 [kworker/1:0H]
root        16  0.0  0.0      0     0 ?        S    09:59   0:00 [watchdog/2]

USER:该进程属于哪个用户账号的
PID:该进程的进程标识符
%CPU:该进程使用掉的CPU资源百分比
%MEM:该进程所占用掉的物理内存百分比
VSZ:该进程使用掉的虚拟内存量(KB)
RSS:该进程占用的固定的内存量(KB)
TTY:该进程是在哪个终端机上运行,若与终端机无关则显示“?”
STAT:该进程目前的状态,与ps -l显示的S标识相同
START:该进程被触发启动的时间
TIME:该进程实际占用的CPU时间
COMMAND:该进程的实际命令

关于stat标示列

    D    不可中断     Uninterruptible sleep (usually IO)
    R    正在运行,或在队列中的进程
    S    处于休眠状态
    T    停止或被追踪
    Z    僵尸进程
    W    进入内存交换(从内核2.6开始无效)
    X    死掉的进程


    <    高优先级
    N    低优先级
    L    有些页被锁进内存
    s    包含子进程
    +    位于后台的进程组;
    l    多线程,克隆线程  multi-threaded (using CLONE_THREAD, like NPTL pthreads do)

想在我运行一个swoole的tcpserver 然后我查看 ps aux |grep php

chen@chen-pc:/var/www/html/test/swoole$ *ps auxf | grep php*
root      1069  0.0  0.2 317444 28224 ?        Ss   09:59   0:00 php-fpm: master process (/etc/php5/fpm/php-fpm.conf)
www-data  1115  0.0  0.0 317444  8860 ?        S    09:59   0:00  \_ php-fpm: pool www
www-data  1116  0.0  0.0 317444  8860 ?        S    09:59   0:00  \_ php-fpm: pool www
chen     14639  0.0  0.0  14464  2148 pts/1    S+   11:27   0:00      \_ grep php
chen      7957  0.0  0.1 595384 10916 ?        Ssl  10:44   0:00 php5 -f tcp_server.php
chen      7958  0.0  0.1 299436 10104 ?        S    10:44   0:00  \_ php5 -f tcp_server.php
chen      7963  0.0  0.1 285640 10392 ?        S    10:44   0:00      \_ php5 -f tcp_server.php
chen      7964  0.0  0.1 285640 10392 ?        S    10:44   0:00      \_ php5 -f tcp_server.php
chen      7965  0.0  0.1 285640 10392 ?        S    10:44   0:00      \_ php5 -f tcp_server.php
chen      7966  0.0  0.1 285640 10392 ?        S    10:44   0:00      \_ php5 -f tcp_server.php
chen      7967  0.0  0.1 285640 10392 ?        S    10:44   0:00      \_ php5 -f tcp_server.php
chen      7968  0.0  0.1 285640 12980 ?        S    10:44   0:00      \_ php5 -f tcp_server.php
chen      7969  0.0  0.1 285640 10392 ?        S    10:44   0:00      \_ php5 -f tcp_server.php
chen      7970  0.0  0.1 285640 10396 ?        S    10:44   0:00      \_ php5 -f tcp_server.php
chen      7974  0.0  0.1 595384 10900 ?        Ssl  10:44   0:00 php5 -f tcp_server.php
chen      7975  0.0  0.0 299436 10028 ?        S    10:44   0:00  \_ php5 -f tcp_server.php
chen      7980  0.0  0.1 285640 10348 ?        S    10:44   0:00      \_ php5 -f tcp_server.php
chen      7981  0.0  0.1 285640 10348 ?        S    10:44   0:00      \_ php5 -f tcp_server.php
chen      7982  0.0  0.1 285640 10348 ?        S    10:44   0:00      \_ php5 -f tcp_server.php
chen      7983  0.0  0.1 285640 10348 ?        S    10:44   0:00      \_ php5 -f tcp_server.php
chen      7984  0.0  0.1 285640 10348 ?        S    10:44   0:00      \_ php5 -f tcp_server.php
chen      7985  0.0  0.1 285640 10348 ?        S    10:44   0:00      \_ php5 -f tcp_server.php
chen      7986  0.0  0.1 285640 10348 ?        S    10:44   0:00      \_ php5 -f tcp_server.php
chen      7987  0.0  0.1 285640 10352 ?        S    10:44   0:00      \_ php5 -f tcp_server.php

我们可以看到有两个 stat为 Ssl的tcp_server.php的进程

因为我不小心运行了两次

学习如何杀死进程

kill 命令的使用

*kill[参数][进程号]*

-l  信号,若果不加信号的编号参数,则使用“-l”参数会列出全部的信号名称
-a  当处理当前进程时,不限制命令名和进程号的对应关系
-p  指定kill 命令只打印相关进程的进程号,而不发送任何信号
-s  指定发送信号
-u  指定用户 

实例1:列出所有信号名称

*kill -l*

chen@chen-pc:/var/www/html/test/swoole$ kill -l
 1) SIGHUP   2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP
 6) SIGABRT  7) SIGBUS   8) SIGFPE   9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG  24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF 28) SIGWINCH    29) SIGIO   30) SIGPWR
31) SIGSYS  34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX    


只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略。    下面是常用的信号:
HUP    1    终端断线
INT     2    中断(同 Ctrl + C)
QUIT    3    退出(同 Ctrl + \)
TERM   15    终止
KILL    9    强制终止
CONT   18    继续(与STOP相反, fg/bg命令)
STOP    19    暂停(同 Ctrl + Z)

实例2:先用ps查找进程,然后用kill杀掉

*kill 3268*

实例3:彻底杀死进程

*kill -9 223*

实例4:杀死指定用户所有进程

kill -9 $(ps -ef | grep peidalinux) kill -u peidalinux

实例5:init进程是不可杀的

kill -9 1

[root@localhost ~]# ps -ef|grep init
root         1     0  0 Nov02 ?        00:00:00 init [3]                  
root     17563 17534  0 17:37 pts/1    00:00:00 grep init
[root@localhost ~]# kill -9 1
[root@localhost ~]# kill -HUP 1
[root@localhost ~]# ps -ef|grep init
root         1     0  0 Nov02 ?        00:00:00 init [3]                  
root     17565 17534  0 17:38 pts/1    00:00:00 grep init
[root@localhost ~]# kill -KILL 1
[root@localhost ~]# ps -ef|grep init
root         1     0  0 Nov02 ?        00:00:00 init [3]                  
root     17567 17534  0 17:38 pts/1    00:00:00 grep init
[root@localhost ~]#

现在我们要杀死一个tcp_server.php 的重复进程

chen@chen-pc:/var/www/html/test/swoole$ `kill 7974`
chen@chen-pc:/var/www/html/test/swoole$ ps auxf | grep php
root      1069  0.0  0.2 317444 28224 ?        Ss   09:59   0:00 php-fpm: master process (/etc/php5/fpm/php-fpm.conf)
www-data  1115  0.0  0.0 317444  8860 ?        S    09:59   0:00  \_ php-fpm: pool www
www-data  1116  0.0  0.0 317444  8860 ?        S    09:59   0:00  \_ php-fpm: pool www
chen     15469  0.0  0.0  14464  2224 pts/1    S+   11:41   0:00      \_ grep php
chen      7957  0.0  0.1 595384 10916 ?        Ssl  10:44   0:00 php5 -f tcp_server.php
chen      7958  0.0  0.1 299436 10104 ?        S    10:44   0:00  \_ php5 -f tcp_server.php
chen      7963  0.0  0.1 285640 10392 ?        S    10:44   0:00      \_ php5 -f tcp_server.php
chen      7964  0.0  0.1 285640 10392 ?        S    10:44   0:00      \_ php5 -f tcp_server.php
chen      7965  0.0  0.1 285640 10392 ?        S    10:44   0:00      \_ php5 -f tcp_server.php
chen      7966  0.0  0.1 285640 10392 ?        S    10:44   0:00      \_ php5 -f tcp_server.php
chen      7967  0.0  0.1 285640 10392 ?        S    10:44   0:00      \_ php5 -f tcp_server.php
chen      7968  0.0  0.1 285640 12980 ?        S    10:44   0:00      \_ php5 -f tcp_server.php
chen      7969  0.0  0.1 285640 10392 ?        S    10:44   0:00      \_ php5 -f tcp_server.php
chen      7970  0.0  0.1 285640 10396 ?        S    10:44   0:00      \_ php5 -f tcp_server.php