linux查看进程实例详解

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wsxxdwwzjdy/article/details/78507698

说明:本文所有案例均在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)
    ├─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

展开阅读全文

没有更多推荐了,返回首页