linux 进程的相关命令,Linux之进程管理(2)相关命令之一(示例代码)

Linux之进程管理(2)相关命令之一

procps工具命令对进程管理的使用:ps   pgrep  pidof  pkill  pstree

ps  命令

ps(Process State):report a snapshot of the current processes.

查看当前进程的快照信息表

此命令支持3种风格:

1、SysV风格:选项前必须加-符号,如ps  -ef

2、BSD风格:选项前可以不加-符号,如ps  aux

3、GUN风格:之前两个-符号,类似长选项,如ps  --help

BSD风格选项使用:

a   显示包括所有终端中的进程

x   显示所有非终端中的进程

u   选项中显示进程执行者、cpu、内存等信息

f    选项中显示进程的父进程

j    作业(jobs)控制方式

r    只显示运行状态(R)的信息

T    显示进程所处的终端,只有和终端相关的进程才会显示,否则TTY字段显示会空

p  [pid],...  :指定pid显示,可以是pidlist,多个用,隔开,如1,439,275

q  [pid],...  :quick,快速根pid查找,(注意:cent5版本可能无法使用此选项)

C  [cmdname],... :指定进程名称查询,可以是cmd列表,多个用,分开,如sshd,syslod,crond

o  [option],...  制定特定进程属性信息:

pid、comm、%cpu、%mem、state、tty、euser、ruser

注:特定属性的选项,很多,对应的表示CODE已经其作用显示可以查看对应的man帮助文档,

搜索“STANDARD FORMAT SPECIFIERS”关键字即可列出所有字段CODE及对应介绍。

常用的组合方式:

ps  ax :显示所有进程信息

ps  aux :显示所有进程并显示其进程发起者

ps  auxf :显示所有进程状态并显示进程的父进程

ps  axo  stat,euid,ruid,tty,tpgid,sess,pgrg,ppid,pid,pcpu,comm,pri,rtprio,ni

状态,有效用户ID,发起用户ID,终端,进程组,会话,父PID,cpu占用,使用的命令

SysV风格选项使用:

-A  显示所有进程状态,同-e选项

-e  显示所有进程状态,同-A选项

-l   显示长格式信息

-f  显示完整格式进程信息

--no-headers  不显示头部的字段表示表示,如显示这些信息USER PID %CPU这一行(第一行)

常见用法命令组合:

#BSD风格按标准格式显示所有进程基本信息:

ps  ax

ps  axu

#SystV风格显示所有进程基本信息:

ps  -ef

ps  -elf

ps  -elF

ps  -elfy

#显示进程信息并显示其对应的进程树状(对应的父进程)结构

ps  -ejH注:-H表示为显示进程的阶层结构

ps  axjf

#显示进程中的线程信息:

ps  -eLf注:-L表示显示此进程线程的号码

ps  axms

#显示进程的基本信息及对应的SELinux安全上下文信息:

ps  -eo  euser,ruser,fuser,f,comm,label注:label表示SELinux安全上下文

ps  -eM注:-M表示在进程信息中加入对应的安全上下文信息

ps  axZ注:Z选项作用同SystV风格中的-M选项

#显示每个作为root用户运行真实有效ID的信息格式:

ps  -u root -U root  u

#按进程的命令(CMDNAME)名称只显示进程的PID

ps  -C  syslod  -o  pid=注:后面跟=符号表示只打印PID,不会打印其它附加信息及标题头

#按进程PID来显示进程对应的(CMDNAME)进程名

ps  p  43  o  comm=

ps  -q  43  -o  comm=注:-q为quick mode快速查找模式,按PID,但是只针对3.2.8及以上版本的ps命令

#按指定关键字段来排序,使用k选项时,可以用[+|-]keyword表示按某一字段进行升序或降序排序

ps  axk  comm  o  comm,args注:按所有的命令名称排序,并显示命令名称和命令参数

ps  ax  --sort  pid  o  comm,args注:这里使用长选项--sort同样可以实现排序

ps  k -start_time  -ef注:这里按进程的开启时间进程倒叙,显然1号进进程显示在最后一行

#显示进程的优先级、实时优先级

ps  axo  pri,psr,rtprio注:pri(优先级)、psr(cpu编号)、rtprio(实时优先级,越大越高)

ps  axo  pid,pri,ni注:ni表示nice值,越小优先级相对越高

进程信息表头字段CODE说明:

USER:进程的发起者

PID:进程号

%CPU:进程所占用的cpu资源百分比

%MEM:进程所占用的物理内存百分比

VSZ:进程使用掉的虚拟内存大小,单位为kb

RSS:进程占用的固定内存大小,单位为kb

TTY:显示进程在哪个终端运行

STAT:进程目前的状态

START:进程被触发的时间(start_time)

COMMAND:触发此进程的命令

进程状态对应的CODE说明:

BSD风格进程状态:

D   uninterruptible sleep表示不可中断的睡眠(通常为IO来唤醒)

R   running or runnable     表示可运行(在运行队列)

S   interruptible sleep     可中断睡眠(等于一个进程结束后,无需其他IO随时可唤醒)

T   stopped by job          停止状态,不会被再次控制,需要手动发送信号启动

t   stopped by debugger     停止期间可被调试器跟踪

W   paging                  分页 (只支持2.6.XX以上内核)

X   dead                    被杀死

Z   zombie                  僵死状态,不能被其父进程回收

SysV风格:

N:低优先级进程

+:前台进程,占据着某个终端

l:多线程进程

s:会话进程的首个进程(session leader)

用法案例展示:

#显示所有进程[[email protected] init.d]# ps ax | head -n 10

ad15a308d032517d1e2e665c41cbe8eb.png

#显示所有进程并显示进程执行用户、内存的等信息[[email protected] init.d]# ps aux | head -n 10

4e049b82e8085d16cc70da898c3180aa.png

#显示所有进程信息,并显示对应的进程树状结构

[[email protected] init.d]# ps axjf | head -n 10

b3b1628dde7424bfb5e685ede9650dcd.png

#显示线程信息[[email protected] init.d]# ps axms | head -n 10

eb273a2f92e68b6d8b5d6108148c0be7.png

#获取进程的安全信息(SElinux安全上下文)[[email protected] init.d]# ps axZ | tail -n 10

1ade02f26de279b4c025578d89e006a2.png

#显示每个作为根用户运行的进程的(真实和有效ID)用户格式:[[email protected] init.d]# ps -U root -u root u | tail -n 10

5b77d986f5452bdf160cf41259e557b2.png

#自定义显示所有进程的指定字段属性信息[[email protected] ~]# ps axo state,pid,euid,ruid,tty,tpgid,sess,pgrp,ppid,pcpu,comm | head -n 10

151afed3b2aaa8fd530979a812858e4b.png

#显示特定服务或进程名字的信息[[email protected] init.d]# ps -C sshd -o pid,comm

PID COMMAND

3407 sshd

11484 sshd

#指定多个进程出名称列出简要信息[[email protected] init.d]# ps -C sshd,syslogd,crond

PID TTY          TIME CMD

2928 ?        00:00:00 syslogd

3407 ?        00:00:00 sshd

3494 ?        00:00:00 crond

11484 ?        00:00:08 sshd

#只列出指定名称对应的PID号[[email protected] init.d]# ps -C syslogd,crond -o pid=

2928

3494

#只列出对应PID的进程名称[[email protected] init.d]# ps -p 2928,3494 -o comm=

syslogd

crond

#使用quick mode快速模式对指定PID进程查找其进程名称[[email protected] ~]# ps  -q  1302 -o comm=

sshd

注意:-q选项在centos5上好像不支持,centos5使用-p选项,子centos7上已经更新为了-q

pgrep 命令

pgrep:look up or signal processes based on name and other attributes

根据名称或信号查找进程及其其它属性信息,支持正则表达式

命令格式:

pgrep  [options]...  PARTERN

-u  [euid|euser] : 按指定进程真正生效者(effetvie user)来查找对应模式匹配的进程

-U  [ruid|ruser]  : 按指定进程发起者(real user)来查找对应模式匹配的进程

-t   [prefix] :按指定终端来查找对应模式进程,prefix格式为/dev/prefix,去掉/dev,如-t pts/0

-P   [parentId] :显示指定进程的子进程进行模式匹配

-l   : 列出进程对应的名称

-f   : 按模式匹配完全对应位进程对应的名称及详细参数

-c   : 统计模式匹配对应到的进程的总个数

-a   :  显示完整进程格式的进程名称,注:(centos7上version3.3.10开始支持此选项)

实例:

根据模式显示完整的进程格式名称,命令版本不同的不同选项实现:

#在centos6中,默认procps进程管理软件包版本为3.2.8[[email protected] ~]# pgrep -V

pgrep (procps version 3.2.8)

#显示所有bash进程[[email protected] ~]# pgrep -f ‘^\‘ -l

4370 -bash

5241 -bash

#显示所有以pickup开头的完整进程命令[[email protected] ~]# pgrep -f ‘\

5467 pickup -l -t fifo -u

#在Centos7中使用procps-ng版本升级为3.3.10,增加了-a选项[[email protected] ~]# pgrep -V

pgrep from procps-ng 3.3.10

#执行使用-a显示完整命令格式信息[[email protected] ~]# pgrep -a -f ‘^sshd‘

27531 sshd: [email protected]/0,pts/1

其它常见用法:

#显示crond进程中生效者用户为root的PID[[email protected] ~]# pgrep -u root ‘crond‘

3494

#显示named域名解析服务的进程编号已经其进程名称[[email protected] ~]# pgrep -u named -u named ‘named‘ -l

5296 named

#显示进程有效者为rpcuser和postfix的进程编号及命令名称[[email protected] ~]# pgrep -u rpcuser,postfix -l

1603 rpc.statd

1974 qmgr

5467 pickup

#显示和指定tty终端相关的前台进程[[email protected] ~]# pgrep -t pts/1 -l

5241 bash

5697 vim

#显示指定PID进程下的子进程,注意:只会显示子进程,不会递归显示其子进程下的进程[[email protected] ~]# pgrep -P 1725 -l

1828 hald-addon-inpu

1836 hald-addon-acpi

#显示所有切换登录界面的进程[[email protected] ~]# pgrep -l -f ‘\

2083 /sbin/mingetty /dev/tty1

2085 /sbin/mingetty /dev/tty2

2088 /sbin/mingetty /dev/tty3

2092 /sbin/mingetty /dev/tty4

2094 /sbin/mingetty /dev/tty5

2096 /sbin/mingetty /dev/tty6

#显示所有打开的bash进程的终端、PID、进程用户、有效用户、进程命令[[email protected] ~]# for pid in `pgrep ‘\‘`; do ps -p ${pid} --no-headers  -o tty,pid,ruser,euser,comm;  done

pts/0      4370 root     root     bash

pts/1      5241 root     root     bash

#显示当前所在的进程组的第一个会话进程[[email protected] ~]# pgrep -s 0 -l

4370 bash

pidof  命令

pidof :find the process ID of a running program.

根据运行进程的名称来查找对应的PID

选项及用法:

pidof  [options]  program  [program]...   注:多个进程名用空格隔开,如crond vim bash

-s    :只显示指定进程名称产生的第一个进程的进程PID

-o  omitpid :进程名称相同,过滤掉指定的PID,支持使用-o %PPID表示过滤掉父进程

-c    :计算指定的进程个数

常见案例:

#显示crond进程的产生的PID[[email protected] ~]# pidof crond

2007

#查看多个进程产生的PID[[email protected] ~]# pidof crond man hald

2007 5871 1724

#显示当前的终端的第一个sshd远程连接[[email protected] ~]# pidof -s sshd

4366

#显示当前shell进程组第一个会话进程[[email protected] ~]# pidof -s  bash

27770

#显示当前的bash,过滤掉bash的父级知道当前未产生子bash进程的bash[[email protected] ~]# pidof  -o %PPID  bash

27535

#查看当前开启的bash个数[[email protected] ~]# pgrep -c bash

4

#验证上面个数,下面列出了4个PID表示却是开启了4个bash进程[[email protected] ~]# pgrep  bash

27535

27770

27903

27914

pkill  命令

pkill (1)            - look up or signal processes based on name and other attributes

通过对根据模式找出的指定进程发送信号来对进程进行通信或调整,同样支持正则表达式

选项格式及用法:

pkill  [option]...  PARTERN

-f, --full  :匹配PARTERN中完整的进程相关命令行及参数

-u, --euid  [euid|euser] : 杀死指定进程真正生效者(effetvie user)来查找对应模式匹配的进程

-U,--uid  [ruid|ruser]  : 杀死指定定进程发起者(real user)来查找对应模式匹配的进程

-t,--terminal   [prefix] :杀死指定终端来查对应匹配模式进程,prefix格式为/dev/prefix,去掉/dev,如-t pts/0

-P,--parent   [parentId] :显示指定进程的子进程进行模式匹配

-c,--count   :发送信号后,打印出统计匹配的进程的格式

-e:发送信号后打印并输出进程的名称及PID

常用的案例:

1、简单的单个进程终止

#查看当前打开的vim编辑器进程[[email protected] ~]# pgrep vim -l

27967 vim

#杀掉所有vim进程

#vim编辑器退强制退出,下面显示进程杀死信号Vim: Caught deadly signal TERM0,0-1         All

Vim: Finished.

Terminated

#杀死进程并打印其对应pid[[email protected] ~]# pkill -e vim

vim killed (pid 27978)

2、杀死模式中匹配的进程完整命令行对应的所有进程

#打开一个额外终端进行tar进程模拟[[email protected] ~]# tar -cvf - /* | tar -tvf -

#杀死匹配的tar进程,并显示指定模式匹配进程的个数[[email protected] ~]# pkill -c -f ‘^tar.*-.*‘

2

解析:这里显示了2,表示处理了两个tar进程命令,前面的模拟打包和后面的模拟列出。

3、直接杀掉后台进程

#再次测试打开一个额外终端进行tar进程模拟,并放入后台执行[[email protected] ~]# tar -cvf - /* | tar -tvf - &

#直接杀死模式匹配的完整tar命令及参数进程[[email protected] ~]# pkill -KILL -f ‘^tar.*-.*‘

4、前后台的的进程处理及信号切换

#再次测试打开一个额外终端进行tar进程模拟[[email protected] ~]# tar -cvf - /* | tar -tvf -

#发送19信号放入让tar进程放入后台休眠进入暂停状态,并打印处理结果[[email protected] ~]# pkill -19 -e -f ‘^tar.*-.*‘

tar killed (pid 5319)

tar killed (pid 5320)

#此时在测试的终端上按回车显示了tar命令已被放入后台[1]+  Stopped                 tar -cvf - /* | tar -tvf -

#通过发送18信号让其回到前台继续运行[[email protected] ~]# pkill -18 -e -f ‘^tar.*-.*‘

tar killed (pid 5319)

tar killed (pid 5320)

#发送KILL信号来杀死进程[[email protected] ~]# pkill -9 -e -f ‘^tar.*-.*‘

tar killed (pid 5319)

tar killed (pid 5320)

解析:这里打印的PID是不会变的,两个tar进程都被杀死。

#再次回到测试终端查看当前作业,要快会显示进程被杀掉状态,否则杀死进程后不显示[[email protected] ~]# jobs

[1]+  Killed                  tar -cvf - /* | tar -tvf -

解析:这里已经Killed说明被此进程已经被强制杀死。

pstree  命令

pstree  :pstree - display a tree of processes

以树状结构显示进程

选项及介绍:

pstree  [options]

-a   :显示执行程序的命令与完整参数

-c   :取消同名程序,合并显示

-h   :对输出的结果进行处理,高亮显示正在执行的程序

-l    : 以长用法显示

-n   :以PID大小排序

-u   :显示UID信息

-G   :使用VT100终端编码显示

-U   :使用UTF-8(Unicode)编码显示

简单实例:

#显示当系统进程数

9544badacd809fd61fa8e60970ad8ab1.png

解析:不加参数默认情况下,同一进程节点下的进程有相同名称的进程会自动合并,如上图中所示,其中红框部分表示有同名进程出现合并,比如”-6*[mingetty]”表示在init进程节点下,有6个mingetty进程,也就是负责切换终端时提供交互式登录界面的进程。而绿框部分的花括号及{}里表示父进程中子线程,比如rsyslogd日志服务提供了3个子线程。

本文出自 “孟天霸-IT的垃圾回收站” 博客,谢绝转载!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值