您的位置:首页 > 运维架构 > Linux

linux查看进程实例详解

2017-11-11 17:44 281 查看
说明:本文所有案例均在linux 2.6.32-642.el6.x86_64验证成功

查看进程

ps (重要)

Process State 是非常强大的进程查看命令,用于报告当前系统的进程状态。

常用选项:

1、BSD风格

a——和终端有关的进程

x——和终端无关的进程

u——显示进程的执行者

2、sys V风格

-e——查看所有进程

-l——long,长格式

-f——full,详细信息

-o——指定输出格式

常用命令

ps #查看隶属于自己的进程

ps -l(ps -u)#仅查看隶属于自己进程的详细信息

[root@daidai ~]# ps -l
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0   1703   1698  0  80   0 - 27104 wait   pts/0    00:00:00 bash
4 R     0   1779   1703  0  80   0 - 27035 -      pts/0    00:00:00 ps


F 进程标志

4 此进程的权限为root

1 此进程仅可进行复制(fork)而无法被执行(exec)

S 进程状态

R:该进程正在运行中

S:该进程目前正在睡眠状态(idle),但可以被唤醒(signal)

#进程睡眠并不代表该进程未开启;

D: 不可被唤醒的睡眠状态,通常这个进程可能在等待I/O的情况(ex>打印)

T:停止状态,stop,可能是在工作控制(后台暂停)或除错(traced)状态

Z:“僵尸”状态,进程已经终止但却无法被删除至内存外

UID、PID、PPID

该进程是root用户(UID为0一般为root)的1730进程(UID),此进程的父进程为1698(PPID);

C

CPU利用率,单位为百分比;

PRI/NI

此进程被CPU执行的优先级(后续会详解);

ADDR、SZ、WCHAN

都与内存有关;ADDR表示该进程在内存的哪个部分,running的进程显示-,SZ表示此进程用掉多少内存,WCHAN表示目前进程是否在运行中,running显示-

ps aux(ps -le) #查看所有用户执行的过程的详细信息

[root@daidai ~]# ps -aux | head -n 5
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.1  19360  1528 ?        Ss   19:13   0:03 /sbin/init
root          2  0.0  0.0      0     0 ?        S    19:13   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    19:13   0:00 [migration/0]
root          4  0.0  0.0      0     0 ?        S    19:13   0:00 [ksoftirqd/0]


user:进程执行者;

PID:进程的ID;

%CPU:进程CPU占用率;

%MEM:进程内存占用率;

VSZ:该进程使用掉的虚拟内存大小(kb);

RSS:该进程占用的真实内存大小;

TTY:是否终端有关;



STAT:进程状态;



START:进程启动时间;

TIME:进程占用CPU的总时长;

COMMAND:进程名

【COMMAND】代表的是内核进程的一个线程

ps -o pid,comm,ni

指定进程按PID、COMMAND、NICE的格式输出

列出占用CPU最多的5个进程,并按从大到小进行排序

[root@daidai ~]# ps -eo comm,pcpu --sort -pcpu | head -n 5
COMMAND         %CPU
events/0         0.2
init             0.0
kthreadd         0.0
migration/0      0.0


pcpu:cpu使用率的百分比;

可直接在后面接–sort进行排序;

和kill搭配

用于随时终端、删除不必要的程序

例:寻找并杀死僵尸进程

top | head -n 2 #查看服务器是否有僵尸进程,若zombie>0则有;(见top详解)

ps -efo stat,ppid,pid,cmd | grep -e ‘^[Zz]’ #寻找僵尸进程

Z 12348 12344 /path/cmd

kill -15 12348 #给进程发送signal,杀死这个僵尸进程

ps -efo stat,ppid,pid,cmd | grep -e ‘^[Zz]’ #确认该僵尸进程已被杀死

若未被杀死,可以通过以下方法解决:

kill -15 12344 #杀死其父进程

kill -9 12348 #强制杀死

killall/pkill P_name #通过进程名杀死进程

小结:使用ps命令可确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵尸、哪些进程占用率过多的资源等等,总之大部分信息都是可以通过执行该命令得到的

top

top是一个交互式系统性能监控工具,不同于ps是静态的结果输出,top可以实时动态地查看系统的整体运行情况。

通过top命令所提供的互动式界面,用热键可以管理。

#这个交互界面,类似任务管理器



load average:系统负载对于单个处理器来说,负载在0-1.00之间是正常的,超过1.00就要引起注意了,系统已经超载了,我理解为塞车了。在多核处理器中,你的系统均值不应该高于处理器核心的总数(多个1*CPU核数),还可以通过uptime查看系统负载;

%us:用户空间占用CPU百分比,此值较高时,表示进程消耗CPU时间多,如果长期超过50%的时候,我们就要考虑优化程序算法或者进行加速;

%sy:内核空间占用CPU百分比,此值较高时,表示系统内核消耗CPU资源多,我们应该检查原因;

%wa:等待输入输出的CPU时间百分比,此值较高时,说明IO等待验证,这可能是由于磁盘大量随机访问造成,也可能造成磁盘出现瓶颈(块操作);

%id:反映了CPU繁忙程度;

buffers和cached区别了解一下:buffer是块设备的读写缓存区,cached是文件系统本身的页面缓存,它们都是linux操作系统底层的机制,目的是加速对磁盘的访问;

PR和NI:系统优先级有2种,一种是不能被用户更改,由系统控制的priority;一种是nice值,可以被用户修改(使用renice命令),范围-20~+19,越小越优先;

小结



RT代表实时,real time,最高优先级

每隔3s刷清一次,-b改变时间;T、M、P 按键盘

pstree

linux系统中,每一个进程都是由其父进程创建的,

此命令以树状图的方式展现进程间的派生关系。

常用命令

pstree -p 显示当前所有进程的进程号和进程id

[root@daidai ~]# pstree -p
init(1)─┬─NetworkManager(1407)
├─auditd(1336)───{auditd}(1337
4000
)
├─crond(1668)
├─cupsd(1441)
├─dbus-daemon(1393)───{dbus-daemon}(1396)
├─dmeventd(1097)─┬─{dmeventd}(1098)
│                └─{dmeventd}(1099)
├─master(1654)─┬─pickup(1780)
│              └─qmgr(1664)
├─mingetty(1681)
├─mingetty(1683)


由上可知,所有的进程都是依附在init这个进程下面,且id(init)=1,是由init内核主动调用的第一个进程;

systmd是Rehat7以上版本新的service,作用是加载服务,也是红帽启动的第一个进程

pgrep

通过进程名与其他属性来查找进程,并显示查找到的进程id

常用选项

-l ——显示进程名

参数

进程名称:指定要查找的进程名称,同时也支持类似grep指令中的匹配模式

[root@daidai ~]# pgrep -l sshd
1569 sshd
1824 sshd


pstree -a

显示进程的所有详细信息,遇到相同的进程名可以压缩展示

[root@daidai ~]# pstree -a
init
├─NetworkManager --pid-file=/var/run/NetworkManager/NetworkManager.pid
├─auditd
│   └─{auditd}
├─crond
├─cupsd -C /etc/cups/cupsd.conf
├─dbus-daemon --system
│   └─{dbus-daemon}
├─dmeventd
│   ├─{dmeventd}
│   └─{dmeventd}
├─master
│   ├─pickup -l -t fifo -u
│   └─qmgr -l -t fifo -u
├─mingetty /dev/tty1
├─mingetty /dev/tty2


如果子进程挂掉或者老是杀不掉子进程,则可用pstree来找到父进程杀掉;

写在最后的话

本人只是一个在linux学习大军中搬砖的小小的一员,技术水平有限,文中难免出现不妥或者错讹,欢迎大家在评论区多多指正,共同进步,不尽感激!

原创不易,转载请务必保留出处http://blog.csdn.net/wsxxdwwzjdy/article/details/78507698
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux