资讯详情

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

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

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

ps 命令

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

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

该命令支持三种风格:

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)

用法案例展示:

#显示所有过程[[emailprotected]init.d]#psax|head-n10

ad15a308d032517d1e2e665c41cbe8eb.png

#显示执行用户、内存和其他信息的所有过程和过程[[emailprotected]init.d]#psaux|head-n&bsp;10

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

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

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

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

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

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

#显示特定服务或进程名字的信息[[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)编码显示

简单实例:

#显示当系统进程数

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

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

标签: 连接器axk736145j

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台