Linux常用命令:ps,kill进程相关命令详解

star2017 1年前 ⋅ 1278 阅读

ps 命令是 Process Status 的缩写,报告当前进程的快照。用于查看进程状态,可以查看哪些进程正在运行及所占资源情况等等。

kill 用于终止运行中的进程,可以通过指定进程号(pid)来杀死指定的进程。

ps

Linux ps (英文全拼:process status)命令用于显示当前进程的状态,类似于 windows 的任务管理器。

ps 显示有关选中的活动进程的信息。如果要重复更新(动态显示)所选内容和显示的信息,请改用 top 命令。

语法

ps [options]

ps 命令的 参数选项(options)接受下面三种语法风格:

  • UNIX:可以组合在一起使用,前面必须有 -符号。

  • BSD:可以组合在一起使用,前面不能与 - 一起使用

  • GND:长选项,前面有两个--符号

参数

ps 的参数非常多,下面仅列出几个常用的参数及大致含义:

-A 显示所有进程(同 -e)
 a 显示所有进程
-a 显示同一终端下的所有进程
-u 显示进程的用户信息
-f 完整列表显示进程信息
-l 
 c 显示进程的真实名称
-N 反向选择
 e 显示环境变量
-H 显示树状结构
 r 显示当前终端的进程
 T 显示当前终端的所有程序
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的行程 
-C<命令> 列出指定命令的状况
--lines<行数> 每页显示的行数
--width<字符数> 每页显示的字符数
--help 显示帮助信息
--version 显示版本显示

示例

# 要使用标准语法查看系统上的每个进程:
ps -e
ps -ef
ps -eF
ps -ely

# 要使用BSD语法查看系统上的每个进程,请执行以下操作:
ps ax
ps axu

# 树型结构显示进程树,包括进程的线程
ps -ejH
ps axjf  # 也可使用 pstree 命令
# 要获取有关线程的信息
ps -eLf
ps axms

# 获取安全信息
ps -eo euser,ruser,suser,fuser,f,comm,label
ps axZ
ps -eM

# -e 显示所有进程信息, -o 参数控制输出; Pid,User,Args参数分别显示PID,用户,应用
# 能与 -e 参数一起使用的关键字有 args,cmd,comm,command,fname,ucmd,ucomm,lstart,bsdstart 和 start
ps -eo pid,user,args

# 要以用户格式查看以root(实际有效ID)身份运行的每个进程:
# -U 参数按真实用户ID(RUID)筛选进程,它会从用户列表中选择真实用户名或 ID。真实用户即实际创建该进程的用户
# -u 参数用来筛选有效用户ID(EUID)
# 最后的 u 参数用来指定以用户的格式输出,由User,PID,%CPU,%MEM,VSZ,RSS,TTY,STAT,START,TIME和COMMAND这几列
ps -U root -u root u

# 要使用用户定义的格式查看每个进程,请执行以下操作
ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
ps -Ao pid,tt,user,fname,tmout,f,wchan

# 只打印syslogd的进程ID:
ps -C syslogd -o pid=

# 只打印PID 42的名称:
ps -q 42 -o comm=

帮助

[root@iZf8z5ura2kb73ra6wu0phZ ~]# ps --help

Usage:
 ps [options]

 Try 'ps --help <simple|list|output|threads|misc|all>' #[简单|列表|输出|线程|其它|所有]
  or 'ps --help <s|l|o|t|m|a>'
 for additional help text.
[root@iZf8z5ura2kb73ra6wu0phZ ~]# ps --help a

Usage:
 ps [options]

Basic options:         # 基本的参数选项
 -A, -e               # 所有进程
 -a                   all with tty, except session leaders
  a                   all with tty, including other users
 -d                   all except session leaders
 -N, --deselect       negate selection
  r                   # 正在运行的进程
  T                   # 在此终端的所有进程
  x                   # 没有终端控制的进程

Selection by list:      # 按列表选择
 -C <command>         # 命令名称,进程命称
 -G, --Group <GID>    real group id or name
 -g, --group <group>  session or effective group name
 -p, p, --pid <PID>   process id
        --ppid <PID>  parent process id
 -q, q, --quick-pid <PID>
                      process id (quick mode)
 -s, --sid <session>  session id
 -t, t, --tty <tty>   terminal
 -u, U, --user <UID>  effective user id or name
 -U, --User <UID>     real user id or name

  The selection options take as their argument either:
    a comma-separated list e.g. '-u root,nobody' or
    a blank-separated list e.g. '-p 123 4567'

Output formats:         # 选择输出格式
 -F                   extra full
 -f                   #完整格式,包括命令行
  f, --forest         ascii art process tree
 -H                   show process hierarchy
 -j                   jobs format
  j                   # BSD 工作的控制格式
 -l                   # 长格式输出,较详细的信息
  l                   BSD long format
 -M, Z                add security data (for SELinux)
 -O <format>          preloaded with default columns
  O <format>          as -O, with BSD personality
 -o, o, --format <format>
                      user-defined format
  s                   signal format
  u                   user-oriented format
  v                   virtual memory format
  X                   # 寄存器格式
 -y                   do not show flags, show rss vs. addr (used with -l)
     --context        display security context (for SELinux)
     --headers        repeat header lines, one per page
     --no-headers     do not print header at all
     --cols, --columns, --width <num>
                      set screen width
     --rows, --lines <num>
                      set screen height

Show threads:
  H                   as if they were processes
 -L                   possibly with LWP and NLWP columns
 -m, m                after processes
 -T                   possibly with SPID column

Miscellaneous options: # 其它选项
 -c                   show scheduling class with -l option
  c                   show true command name
  e                   show the environment after command
  k,    --sort        specify sort order as: [+|-]key[,[+|-]key[,...]]
  L                   show format specifiers
  n                   display numeric uid and wchan
  S,    --cumulative  include some dead child process data
 -y                   do not show flags, show rss (only with -l)
 -V, V, --version     display version information and exit
 -w, w                unlimited output width

        --help <simple|list|output|threads|misc|all>
                      display help and exit

[root@iZf8z5ura2kb73ra6wu0phZ ~]# ps -aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.5 241740  9956 ?        Ss   Oct07   0:10 /usr/lib/systemd/systemd --switched-root --system --deserialize 17
root         2  0.0  0.0      0     0 ?        S    Oct07   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        I<   Oct07   0:00 [rcu_gp]
root         4  0.0  0.0      0     0 ?        I<   Oct07   0:00 [rcu_par_gp]
root         6  0.0  0.0      0     0 ?        I<   Oct07   0:00 [kworker/0:0H-kblockd]
USER PID PPID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
所属用户 进程ID 父进程ID CPU使用率 内存使用率 使用的虚拟内存 占用的固定内存 终端号,或终端位置 进程状态 开始时间 执行时间,占用的CPU处理时间 所执行命令
# ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S     0 18614 18613  0  80   0 -  6636 -      pts/1    00:00:00 bash
0 R     0 19743 18614  0  80   0 - 11191 -      pts/1    00:00:00 ps
F S UID C PRI NI ADD SZ WCHAN CMD
代表这个程序的旗标 (flag),
4 代表使用者为 superuser
代表这个程序的状态 (STAT); 用户ID 占用CPU资源比率 进程优先级,Priority 的简写 进程的优先级值,nice值,表示进程可被执行的优先级的修正数值 内核函数,进程所在内存的位置,发果是执行程序,一般是 [ - ] 使用掉的内存大小 进程是否正在运行,若为 - 表示正在运作 同 COMMAND,正在执行的命令

TTY:该进程是在那个终端机上面运作,若与终端机无关,则显示 ?。另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。

STAT:进程当前的状态,主要有:

  • R :Running,正在运作,或者是可被运作
  • S :Sleeping,正在休眠中,但可被某些讯号(signal) 唤醒
  • T :Termination,停止或被跟踪
  • D:不可中断 uninterruptible sleep (usually IO)
  • Z :Zombie,该程序应该已僵死,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态
  • s:包含子进程
  • X:死掉的进程
  • <:高优先级
  • N:低优先级
  • L:有些页被锁进内存
  • +:位于后台的进程组
  • l:多线程,克隆线程

ps结合grep查找指定进程

ps -ef|grep java

ps给合watch监控进程

# 监控所有进程信息,按内存和CPU使用排序
# -n 1 指监控间隔 1 秒输出
watch -n 1 'ps -aux --sort -pmem,-pcpu'

# 显示前10条信息
watch -n 1 'ps -aux --sort -pmem,-pcpu | head -n 10'

# 输出结果
Every 10.0s: ps -aux --sort -pmem,-pcpu | head -n 10                               iZf8z5ura2kb73ra6wu0phZ: Wed Oct 28 11:37:57 2020

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root     19611  0.1 20.4 2905268 361308 ?      Sl   Oct26   2:32 java -jar blog-web-2.2.2.jar
root     19612  0.0 18.3 2912164 325028 ?      Sl   Oct26   1:25 java -jar blog-admin-2.2.2.jar
mysql     9841  0.0 17.7 1642560 313516 ?      Sl   Oct09   9:35 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/u
root       875  0.0  1.2 424308 22748 ?        Ssl  Oct07   2:04 /usr/libexec/platform-python -Es /usr/sbin/tuned -l -P
root     11394  0.2  1.2 174764 21688 ?        S<sl Oct23  16:34 /usr/local/aegis/aegis_client/aegis_10_89/AliYunDun
polkitd    704  0.0  0.7 1626820 13624 ?       Ssl  Oct07   0:00 /usr/lib/polkit-1/polkitd --no-debug
root       541  0.0  0.7 155932 13544 ?        Ss   Oct07   0:05 /usr/lib/systemd/systemd-journald
root       870  0.0  0.6 389076 11264 ?        Ssl  Oct07   0:13 /usr/sbin/NetworkManager --no-daemon
root       786  0.0  0.5 220688  9992 ?        S    Oct07   0:12 /usr/libexec/sssd/sssd_nss --uid 0 --gid 0 --logger=files

显示所有进程及命令行

# -e 等于 -A; -f 显示完整格式,包括命令行
ps -ef

显示所有在内存中的进程

ps aux

根据CPU使用来升序排序

ps -aux --sort -pcpu | less

根据内存使用来排序

ps -aux --sort -pmem | less

条件显示前10个结果

ps -aux --sort -pcpu,+pmem | head -n 10

指定进程名,命令名

ps -C java

指定进程ID显示信息

ps -p 19914

查看指定进程的线程

ps -L 19914

显进程的树型结构

ps -axjf

显示进程及其线程树结构

pstree -p root | grep java

root 为用户名,-p 为显示进程ID。

显示进程开启的线程

ps -Lf 19611

显示进程的栈跟踪信息

# 安装GDB调试工具
yum install gdb

pstack 19611

显示所有进程信息

ps -A

显示指定用户的进程

ps -u root

输出指定的字段

ps -o pid,ppid,pgrp,session,tpgid,comm
ps -eo %cpu,%mem,vsz,rsz,start,stat,pid,sid,ni,uid,user,rss,time,command
# 指定进程号
ps -o %cpu,%mem,vsz,rsz,start,stat,pid,sid,ni,uid,user,rss,time,command --pid 19611
%CPU %MEM    VSZ   RSZ  STARTED STAT   PID   SID  NI   UID USER       RSS     TIME COMMAND

进程信息输出到文件

ps -aux > ps_aux.txt

分页查看输出的信息

# 用 | 管道和 more 或 less 连接起来分页查看
ps -aux |more
ps -ax|less

显示指定服务相关的进程

ps aux | egrep '(cron|syslog)'

kill

kill 命令是向指定的进程或进程组发送指定的信号。

语法

kill [-signal|-s signal|-p] [-q value] [-a] [--] pid|name...
kill -l [number] | -L

描述

如果未指定信号,则发送TERM(15号)信号。 此信号的默认操作是终止进程。该信号应优先于KILL信号(9号)使用,因为一个进程可能会为TERM信号安装一个处理程序,以便在有序终止之前执行清理步骤。

如果在发送TERM信号后进程没有终止,则可以使用KILL信号。请注意,后者的信号是无法被目标进程捕获的,因此不会给目标进程提供在终止之前执行任何清理的机会。

大多数现代 Shell 内置了kill命令,其用法与此处描述的命令非常相似。--all,-pid--queue选项以及通过命令名称指定进程的可能性都是本地扩展。

如果信号为 0,则不发送实际信号,但仍执行错误检查。

参数

# 列出所有信号名称和编号, 或把给定的信号编码转换为名称
-l --list [number]

# 与 -l 类似, 打印信号名称及对应的编号
-L --table

最常用的信息有:

  • 1:HUP,重新加载进程
  • 9:KILL,直接杀死一个进程
  • 15:TERM,默认编码,正常停止一个进程,在停止前会执行一些回收工作,某些情况下可能杀不死

信号

[root@iZf8z5ura2kb73ra6wu0phZ blog]# 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    
[root@iZf8z5ura2kb73ra6wu0phZ blog]# kill -l 15
TERM
[root@iZf8z5ura2kb73ra6wu0phZ blog]# kill -l 9
KILL

返回

kill 命令有以下返回值:

  • 0:成功
  • 1:失败
  • 64:部分成功(当指定一不只一个进程时)

正常终止指定进程

kill [pid]:根据PID杀死进程。

# 等同于 kill -15 4786,终止进程,可能存在终止失败的情况,就可使用 9 号信息强止终止。
kill 4786

强制杀死指定进程

# 强制杀死进程
kill -9 4786

PS命令查看进程号

执行kill命令之前,常会查看执行程序的进程号PID

# 查看进程信息,有显示PID列即为进程号
ps -ef|grep nginx

root      4786     1  0 Mar18 ?        00:00:00 nginx: master process ./nginx

杀死指定用户所有进程

# 方法一 过滤出进程 
kill -9 $(ps -ef | grep java) 
# 方法二 指定用户进程名
kill -u java

其它参考命令

ps(1), regex(7), signal(7), killall(1), skill(1), kill(1), kill(2)

pgrep,pkill

pgrep,pkill:基于名称和其他属性查找或通知进程

语法

pgrep [options] pattern
pkill [options] pattern

pattern:指定扩展正则表达式以与进程名或命令行匹配。

pgrep

pgrep查看当前正在运行的进程,并列出与选择标准匹配到 stdout 的进程ID。 所有条件都必须匹配。 例如,

# 列出 root 用户拥有的 sshd 进程号
$ pgrep -u root sshd

# 列出 root 用户和daemon用户的所有进程号
$ pgrep -u root,daemon

pkill

pkil将向每个进程发送指定的信号(默认为SIGTERM),而不是在stdout上列出它们。

示例

Example 1: Find the process ID of the named daemon:
$ pgrep -u root named

Example 2: Make syslog reread its configuration file:
$ pkill -HUP syslogd

Example 3: Give detailed information on all xterm processes:
$ ps -fp $(pgrep -d, -x xterm)

Example 4: Make all chrome processes run nicer:
$ renice +4 $(pgrep chrome)
更多内容请访问:IT源点

相关文章推荐

全部评论: 0

    我有话说: