ps进程管理

ps进程管理

进程是程序的运行实例。运行在一台计算机中的多个进程都被分配了一个称为进程ID(PID)的唯一数字标识。同一个程序的多个实例可以同时运行,但是它们的PID却互不相同。进程包括多种属性,例如拥有该进程的用户、进程使用的内存数量,进程占用的cpu时间等。

和进程管理相关的重要命令是top、ps和pgrep。

ps是收集进程信息的重要工具。它提供的信息包括:拥有进程的用户、进程的起始时间、进程对应的命令行路径、PID、进程所属的终端(TTY)、进程使用的内存、进程占用的CPU等。例如:

[root@jenkins ~]# ps
  PID TTY          TIME CMD
 1980 pts/0    00:00:00 bash
 2058 pts/0    00:00:00 ps

  ps命令通常结合一些参数使用。如果不使用任何参数,ps将显示运行在当前终端(TTY)中的进程。第一列显示的进程的ID(PID),第二列是TTY(终端),第三列是进程启动后过去的时间,最后一列是CMD(进程所对应的命令)。

ps命令基本选项参数说明:

a:显示现行终端机下的所有程序,包括其他用户的程序。
c:列出程序时,显示每个程序真正的指令名称,而不包含路径,选项或常驻服务的标示。
e:列出程序时,显示每个程序所使用的环境变量。
f:用ASCII字符显示树状结构,表达程序间的相互关系。
g:显示现行终端机下的所有程序,包括群组领导者的程序。
h:不显示标题列。
u:以用户为主的格式来显示程序状况。
x:显示所有程序,不以终端机来区分。
r:只列出现行终端机正在执行中的程序。
v:采用虚拟内存的格式显示程序状况
-a:显示所有终端机下执行的程序,除了阶段作业领导者之外。
-c:显示CLS和PRI栏位。
-d:显示所有程序,但不包括阶段作业领导者的程序。
-e:显示所有程序。
-f:显示UID,PPIP,C与STIME栏位。
-H:显示树状结构,表示程序间的相互关系。
-u<用户识别码>:列出属于该用户的程序的状况,也可使用用户名称来指定。
-j:采用工作控制的格式显示程序状况
-l或l:采用详细的格式来显示程序状况。
-N:显示所有的程序,除了执行ps指令终端机下的程序之外。

  例如:

[root@jenkins ~]# ps -aux | head -8

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.2 125340  3772 ?        Ss   3月16   0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root         2  0.0  0.0      0     0 ?        S    3月16   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    3月16   0:00 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<   3月16   0:00 [kworker/0:0H]
root         7  0.0  0.0      0     0 ?        S    3月16   0:00 [migration/0]
root         8  0.0  0.0      0     0 ?        S    3月16   0:00 [rcu_bh]
root         9  0.0  0.0      0     0 ?        S    3月16   0:01 [rcu_sched]

   USER : 进程所属用户
   PID : 进程的ID
   %CPU : 进程占用CPU的百分比
   %MEM : 进程占用内存的百分比
   VSZ : 占用虚拟内存量(KB)
   RSS : 占用固定内存量(KB)
   TTY : 进程运行的终端
   STAT : 进程的状态字符
   START: 进程被触发启动的时间。
   TIME : 进程实际使用CPU运行的时间。
   COMMAND : 进程所对应的命令

  其中STAT(进程的状态字符),不同的状态对应不同的字符,如下:

D 无法中断的休眠状态(通常 IO 的进程);
R 正在运行可中在队列中可过行的;
S 处于休眠状态;
T 停止或被追踪;
W 进入内存交换 (从内核2.6开始无效);
X 死掉的进程 (基本很少見);
Z 僵尸进程;
< 优先级高的进程
N 优先级较低的进程
L 有些页被锁进内存;
s 进程的领导者(在它之下有子进程);
l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads);
+ 位于后台的进程组;

  ps还可以用-o来指定需要显示的列,以便只打印出我们需要的内容。例如:

[root@jenkins ~]# ps -eo pid,comm | head -6   #只打印pid和命令,前6行
  PID COMMAND
    1 systemd
    2 kthreadd
    3 ksoftirqd/0
    5 kworker/0:0H
    7 migration/0

 对应的参数及其描述如下:

pcpu   CPU占用率
pid    进程PID
ppid   父进程ID
pmem   内存使用率
comm   进程对应的命令名
user   启动进程的用户
nice   优先级
time   累计的CPU时间
etime  进程启动后流逝的时间
tty    启动进程的tty设备
euid   有效用户ID
stat   进程状态

根据参数对ps输出进行排序

可以用 --sort 将 ps 命令的输出根据特定的列进行排序。在参数钱满加上+(升序)或者-(降序)来指定排序方式,例如:

[root@jenkins ~]# ps -eo comm,pid,pcpu,pmem --sort -pmem | head -7    #按照使用内存的降序排列,提取前7行
COMMAND           PID %CPU %MEM
tuned            1008  0.0  0.8
polkitd           743  0.0  0.5
NetworkManager    752  0.0  0.4
vmtoolsd          742  0.0  0.3
VGAuthService     741  0.0  0.3
rsyslogd          748  0.0  0.2
[root@jenkins ~]# ps -eo comm,pid,pcpu,pmem --sort +pmem | head -7    #按照使用内存的升序排列,提取前7行
COMMAND           PID %CPU %MEM
kthreadd            2  0.0  0.0
ksoftirqd/0         3  0.0  0.0
kworker/0:0H        5  0.0  0.0
migration/0         7  0.0  0.0
rcu_bh              8  0.0  0.0
rcu_sched           9  0.0  0.0

找出给定命令所对应的进程ID

 假设某个命令有多个实例正在运行,我们可能需要识别这些进程的PID。可以使用以下方法,例如:

[root@jenkins ~]# ps -C nginx
  PID TTY          TIME CMD
 2049 ?        00:00:00 nginx
 2050 ?        00:00:00 nginx

[root@jenkins ~]# ps -C nginx -o pid=
 2049
 2050

  或者使用pgrep

[root@jenkins ~]# pgrep nginx        
2049
2050

    # pgrep 只需要命令的一部分作为输入参数来提取nginx命令的进程ID列表,例如:

[root@jenkins ~]# pgrep ngin
2049
2050
[root@jenkins ~]# pgrep ginx
2049
2050

  但是ps需要你输入命令准确的全名

显示进程的环境变量

了解某个进程依赖哪些环境变量,这类信息我们通常都用的着。进程的运行方式可能及其依赖某组环境变量。要在ps的输出条目中同事列出环境变量,可以使用:

[root@jenkins ~]# ps -eo cmd e

  例如:

[root@jenkins ~]# ps -eo pid,comm,cmd e | grep nginx
 2049 nginx /etc/ngin nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf /etc/nginx/nginx.conf                                                  
 2050 nginx           nginx: worker process                                                                       
 2742 grep XDG_SESSIO grep --color=auto nginx XDG_SESSION_ID=27 HOSTNAME=jenkins TERM=xterm SHELL=/bin/bash HISTSIZE=1000 SSH_CLIENT=192.168.11.156 59028 22 SSH_TTY=/dev/pts/0 USER=root LS_COLORS=rs=0:di=01;34:ln=01;
36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:
*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:
*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=
01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:
*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:
*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:
*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36: MAIL=/var/spool/mail/root PATH=/usr/local/mongodb/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin PWD=/root LANG=zh_CN.UTF-8 HISTCONTROL=ignoredups
SHLVL=1 HOME=/root LOGNAME=root SSH_CONNECTION=192.168.11.156 59028 192.168.11.153 22 LESSOPEN=||/usr/bin/lesspipe.sh %s XDG_RUNTIME_DIR=/run/user/0 _=/usr/bin/grep

  或者

[root@jenkins ~]# ps -eo pid,comm,cmd -e | grep nginx
 2049 nginx           nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
 2050 nginx           nginx: worker process

  

[root@jenkins ~]# ps -eo pid,ppid,comm,cmd -e | grep mongo | grep -v grep
 2817     1       mongod          mongod -f /usr/local/mongodb/etc/mongodb.conf

ps命令详细帮助文件可查看man帮助

[root@jenkins ~]# man ps  

 

记录一些提取某些进程的pid的方式:

[root@jenkins ~]# ps -aux | grep nginx |grep -v grep | awk '{print $2}'
2049
2050

[root@jenkins ~]# ps -eo pid,comm | grep nginx | awk '{print $1}'
2049
2050

[root@jenkins ~]# ps -C nginx | awk '{print $1}' | grep -v 'PID'
2049
2050

[root@jenkins ~]# pgrep nginx | awk '{print $1}'
2049
2050

等等……………………

  

 

posted @ 2020-03-17 11:26  江戸川のコナン  阅读(353)  评论(0编辑  收藏  举报
……