进程
ps命令
f 以树状结构显示
u 显示详细信息
a 显示所有进程
-A 显示所有进程
-u 用户名 是显示该用户下的进程
-l 更多进程详细信息
例子1. 以树状结构显示root用户下进程的详细信息
$ps fu -u root
显示结果如下
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
cpu占比
内存占比
虚拟内存
驻留内存
root 0.0 0.0 ? S : : /usr/sbin/dnsmasq --conf-file=/var/
root 0.0 0.0 ? S : : /usr/sbin/dnsmasq --conf-file=/var/
root 0.0 0.0 ? S : : /usr/sbin/dnsmasq --conf-file=/var/
root 0.0 0.0 ? S : : [kthreadd]
root 0.0 0.0 ? S : : \_ [ksoftirqd/]
root 0.0 0.0 ? S< : : \_ [kworker/:0H]
root 0.2 0.0 ? S : : \_ [rcu_sched]
root 0.0 0.0 ? S : : \_ [rcu_bh]
root 0.3 0.0 ? S : : \_ [rcuos/]
root 0.0 0.0 ? S : : \_ [rcuob/]
root 0.0 0.0 ? S : : \_ [migration/]
root 0.0 0.0 ? S : : \_ [watchdog/]
root 0.0 0.0 ? S : : \_ [watchdog/]
root 0.0 0.0 ? S : : \_ [migration/]
root 0.0 0.0 ? S : : \_ [ksoftirqd/]
root 0.0 0.0 ? S< : : \_ [kworker/:0H]
root 0.0 0.0 ? S : : \_ [rcuos/]
root 0.0 0.0 ? S : : \_ [rcuob/]
root 0.0 0.0 ? S : : \_ [watchdog/]
root 0.0 0.0 ? S : : \_ [migration/]
root 0.0 0.0 ? S : : \_ [ksoftirqd/]
root 0.0 0.0 ? S< : : \_ [kworker/:0H]
root 0.0 0.0 ? S : : \_ [rcuos/]
root 0.0 0.0 ? S : : \_ [rcuob/]
root 0.0 0.0 ? S : : \_ [watchdog/]
root 0.0 0.0 ? S : : \_ [migration/]
root 0.0 0.0 ? S : : \_ [ksoftirqd/]
例子2:显示所有用户的详细信息
$ps aux
显示效果如下
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 0.0 0.0 ? Ss : : /sbin/init
root 0.0 0.0 ? S : : [kthreadd]
root 0.0 0.0 ? S : : [ksoftirqd/]
root 0.0 0.0 ? S< : : [kworker/:0H]
root 0.2 0.0 ? S : : [rcu_sched]
root 0.0 0.0 ? S : : [rcu_bh]
root 0.3 0.0 ? S : : [rcuos/]
root 0.0 0.0 ? S : : [rcuob/]
root 0.0 0.0 ? S : : [migration/]
root 0.0 0.0 ? S : : [watchdog/]
root 0.0 0.0 ? S : : [watchdog/]
root 0.0 0.0 ? S : : [migration/]
root 0.0 0.0 ? S : : [ksoftirqd/]
root 0.0 0.0 ? S< : : [kworker/:0H]
root 0.0 0.0 ? S : : [rcuos/]
root 0.0 0.0 ? S : : [rcuob/]
例子3:显示,更多详细信息 -l
$ps -l
显示效果如下:f
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
标志
状态(r运行,s睡眠,t终止,z僵尸)
用户 进程号 父进程
cpu使用
优先权
优先级修正
地址
使用内存
等待的进程资源
终端 运行时间 运行指令
S - wait pts/ :: bash
R - - pts/ :: ps
例子4:查找所需要的信息
$ps aux |grep httpd
显示如下
$root 0.0 0.0 pts/ S+ : : grep --color=auto httpd
top命令
top 运行中可以通过 top 的内部命令对进程的显示方式进行控制。内部命令如下:
s – 改变画面更新频率
l – 关闭或开启第一部分第一行 top 信息的表示
t – 关闭或开启第一部分第二行 Tasks 和第三行 Cpus 信息的表示
m – 关闭或开启第一部分第四行 Mem 和 第五行 Swap 信息的表示
N – 以 PID 的大小的顺序排列表示进程列表
P – 以 CPU 占用率大小的顺序排列进程列表
M – 以内存占用率大小的顺序排列进程列表
h – 显示帮助
n – 设置在进程列表所显示进程的数量
q – 退出 top
s – 改变画面更新周期
例子1:显示所有进程状态
$top
显示内容:
top - :: up :, users, load average: 0.55, 0.43, 0.48 ### 当前时间 ,已经运行时间 ,2个用户 ,负载:三个数字分别为1分钟,5分钟,15分钟采样。当其数值等于cpu个数则为满负载。
Tasks: total, running, sleeping, stopped, zombie ### 任务即进程总数247,2个正在运行,245个在沉睡,0个停止,0个僵尸
%Cpu(s): 3.6 us, 1.3 sy, 0.0 ni, 95.1 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st ### 在用户状态下占用cpu3.6% ,系统态下1.3%,改变了优先级的进程为0%,cpu空闲95.1%,wa等待输入输出为0%,
KiB Mem: total, used, free, buffers ### 物理内存为16G,13G已经使用,3g空闲,用作内核的缓存为3G
KiB Swap: total, used, free. cached Mem ### 交换区为4G,使用量为0,4G空闲的交换区,缓冲的的交换区为10G PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND ### 进程id,用户,优先级,优先级1, 虚拟空间,驻留内存(代码段,数据段),共享内存,状态,占用cpu,占用内存,运行时间,执行应用
yamin S 7.6 3.6 :12.75 firefox
yamin S 3.7 0.8 :57.22 QQ.exe
root S 2.7 0.8 :26.51 Xorg
yamin S 2.7 0.3 :27.95 python2.
yamin S 2.3 0.0 :45.18 wineserver
yamin S 1.7 0.9 :24.64 compiz
yamin S 1.3 3.4 :22.52 java
yamin S 1.0 0.2 :16.91 gnome-terminal
root S 0.7 0.0 :55.38 rcuos/
root S 0.7 0.2 :06.68 ceph-mon
yamin S 0.7 0.6 :21.92 codeblocks
yamin S 0.7 0.3 :41.54 python2.
root R 0.3 0.0 :47.00 rcu_sched
root S 0.3 0.0 :10.10 rcuos/
root S 0.3 0.0 :18.23 acpid
root S 0.3 0.4 :20.67 ceph-osd
root S 0.3 0.5 :21.78 ceph-osd
root S 0.3 0.5 :21.59 ceph-osd
yamin S 0.3 0.3 :44.21 ibus-ui-gtk3
例子2:top选择需要显示的
在执行top命令,按f键可以进入列选择,以下是该命令可以显示的列信息。在该界面下按空格可以选中或者取消某一列。
* PID = Process Id SID = Session Id nsMNT = MNT namespace I
* USER = Effective User nTH = Number of Threa nsNET = NET namespace I
* PR = Priority P = Last Used Cpu ( nsPID = PID namespace I
* NI = Nice Value TIME = CPU Time nsUSER = USER namespace
* VIRT = Virtual Image ( SWAP = Swapped Size (K nsUTS = UTS namespace I
* RES = Resident Size ( * CODE = Code Size (KiB)
* SHR = Shared Memory ( RUSER = Real User Name
* S = Process Status DATA = Data+Stack (KiB
* %CPU = CPU Usage nMaj = Major Page Faul
* %MEM = Memory Usage (R nMin = Minor Page Faul
* TIME+ = CPU Time, hundr nDRT = Dirty Pages Cou
* COMMAND = Command Name/Li WCHAN = Sleeping in Fun
PPID = Parent Process Flags = Task Flags <sch
UID = Effective User CGROUPS = Control Groups
RUID = Real User Id SUPGIDS = Supp Groups IDs
SUID = Saved User Id SUPGRPS = Supp Groups Nam
SUSER = Saved User Name TGID = Thread Group Id
GID = Group Id ENVIRON = Environment var
GROUP = Group Name vMj = Major Faults de
PGRP = Process Group I vMn = Minor Faults de
TTY = Controlling Tty USED = Res+Swap Size (
TPGID = Tty Process Grp nsIPC = IPC namespace I
进程列意义
列名 |
含义 |
PID |
进程id |
PPID |
父进程id |
RUSER |
Real user name |
UID |
进程所有者的用户id |
USER |
进程所有者的用户名 |
GROUP |
进程所有者的组名 |
TTY |
启动进程的终端名。不是从终端启动的进程则显示为 ? |
PR |
优先级 |
NI |
nice值。负值表示高优先级,正值表示低优先级 |
P |
最后使用的CPU,仅在多CPU环境下有意义 |
%CPU |
上次更新到现在的CPU时间占用百分比 |
TIME |
进程使用的CPU时间总计,单位秒 |
TIME+ |
进程使用的CPU时间总计,单位1/100秒 |
%MEM |
进程使用的物理内存百分比 |
VIRT |
进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES |
SWAP |
进程使用的虚拟内存中,被换出的大小,单位kb。 |
RES |
进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA |
CODE |
可执行代码占用的物理内存大小,单位kb |
DATA |
可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb |
SHR |
共享内存大小,单位kb |
nFLT |
页面错误次数 |
nDRT |
最后一次写入到现在,被修改过的页面数。 |
S |
进程状态。 |
COMMAND |
命令名/命令行 |
WCHAN |
若该进程在睡眠,则显示睡眠中的系统函数名 |
Flags |
任务标志,参考 sched.h |
例子3:显示某个进程
$top -p 进程号
例子4:显示某个进程里面的线程
$top -Hp N ### N为进程号
vmstat:查看系统负载
$vmstat
显示信息
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
运行 内核缓冲 页面缓冲 内存进入交换区
等待资源 交换区进内存
交换区 块设备读 块设备写
空闲 每秒中断数
上下文切换次数/秒
用户态运行时间比
核心态运行时间比
cpu空闲比率
cpu等待IO占比
虚拟机时间占比
iostat:查看IO负载
$iostat
pstree:查看进程
$pstree -p N ###N为进程号
/proc目录下查询
Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。
用户和应用程序可以通过 proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是 动态从系统内核读出所需信息并提交的。下面列出的这些文件或子文件夹,并不是都是在你的系统中存在,这取决于你的内核配置和装载的模块。另外,在 /proc下还有三个很重要的目录:net,scsi和sys。 Sys目录是可写的,可以通过它来访问或修改内核的参数,而net和scsi则依赖于内核配置。例如,如果系统不支持scsi,则scsi 目录不存在。
除了以上介绍的这些,还有的是一些以数字命名的目录,它们是进程目录。系统中当前运行的每一个进程都有对应的一个目录在/proc下,以进程的 PID号为目录名,它们是读取进程信息的接口。而self目录则是读取进程本身的信息接口,是一个link。
例子1:可以使用cat /proc/xxx,显示相应信息。
/proc/buddyinfo ###每个内存区中的每个order有多少块可用,和内存碎片问题有关 /proc/cmdline ###启动时传递给kernel的参数信息 /proc/cpuinfo ###cpu的信息,physical为物理CPU,cpu cores为物理cpu中的核心,而processor为逻辑cpu,例如开了超线程,可能会出现4个核心,8个逻辑cpu;siblings>cpu cores 则开了超线程 /proc/crypto ###内核使用的所有已安装的加密密码及细节 /proc/devices ###已经加载的设备并分类 /proc/dma ###已注册使用的ISA DMA频道列表 /proc/execdomains ###Linux内核当前支持的execution domains /proc/fb ###帧缓冲设备列表,包括数量和控制它的驱动 /proc/filesystems ###内核当前支持的文件系统类型 /proc/interrupts ###x86架构中的每个IRQ中断数 /proc/iomem ###每个物理设备当前在系统内存中的映射 /proc/ioports ###一个设备的输入输出所使用的注册端口范围 /proc/kcore ###代表系统的物理内存,存储为核心文件格式,里边显示的是字节数,等于RAM大小加上4kb /proc/kmsg ###记录内核生成的信息,可以通过/sbin/klogd或/bin/dmesg来处理 /proc/loadavg ###根据过去一段时间内CPU和IO的状态得出的负载状态,与uptime命令有关
/proc/locks ###内核锁住的文件列表 /proc/mdstat ###多硬盘,RAID配置信息(md=multiple disks) /proc/meminfo ###RAM使用的相关信息 /proc/misc ###其他的主要设备(设备号为10)上注册的驱动 /proc/modules ###所有加载到内核的模块列表 /proc/mounts ###系统中使用的所有挂载 /proc/mtrr ###系统使用的Memory Type Range Registers (MTRRs) /proc/partitions ###分区中的块分配信息 /proc/pci ###系统中的PCI设备列表 /proc/slabinfo ###系统中所有活动的 slab 缓存信息 /proc/stat ### 所有的CPU活动信息 /proc/sysrq-trigger ### /proc/uptime ###系统已经运行了多久 /proc/swaps ###交换空间的使用情况 /proc/version ###Linux内核版本和gcc版本 /proc/bus ###系统总线(Bus)信息,例如pci/usb等 /proc/driver ###驱动信息 /proc/fs ###文件系统信息 /proc/ide ###ide设备信息 /proc/irq ###中断请求设备信息 /proc/net ###网卡设备信息 /proc/scsi ###scsi设备信息 /proc/tty ### tty设备信息 /proc/net/dev ###显示网络适配器及统计信息 /proc/vmstat ###虚拟内存统计信息 /proc/vmcore ###内核panic时的内存映像 /proc/diskstats ### 取得磁盘信息 /proc/schedstat ### kernel调度器的统计信息 /proc/zoneinfo ###显示内存空间的统计信息,对分析虚拟内存行为很有用
例子2:显示某个进程相关的信息
/proc/N ###pid为N的进程信息 /proc/N/cmdline ###进程启动命令 /proc/N/cwd ###链接到进程当前工作目录 /proc/N/environ ###进程环境变量列表 /proc/N/exe ###链接到进程的执行命令文件 /proc/N/fd ###包含进程相关的所有的文件描述符 /proc/N/maps ###与进程相关的内存映射信息 /proc/N/mem ###指代进程持有的内存,不可读 /proc/N/root ###链接到进程的根目录 /proc/N/stat ###进程的状态 /proc/N/statm ###进程使用的内存的状态 /proc/N/status ###进程状态信息,比stat/statm更具可读性 /proc/self ###链接到当前正在运行的进程
例子3:显示整个系统内存映像
$cat /proc/iomem
显示效果如下
-00000fff : reserved
-0009fbff : System RAM
0009fc00-0009ffff : RAM buffer
000a0000-000bffff : PCI Bus :
000c0000-000effff : PCI Bus :
000c0000-000ccfff : Video ROM
000cf000-000cffff : Adapter ROM
000f0000-000fffff : PCI Bus :
000f0000-000fffff : reserved
000f0000-000fffff : System ROM
-dfdf9bff : System RAM
-017bc95b : Kernel code
017bc95c-01d2593f : Kernel data
01e90000-01fd2fff : Kernel bss
dfdf9c00-dfe4bbff : ACPI Non-volatile Storage
dfe4bc00-dfe4dbff : ACPI Tables
dfe4dc00-f7ffffff : reserved
dff00000-f7ffffff : PCI Bus :
e0000000-efffffff : PCI Bus :
e0000000-efffffff : ::00.0
f0000000-f01fffff : PCI Bus :
f0200000-f03fffff : PCI Bus :
f3d00000-f3dfffff : PCI Bus :
f3de0000-f3deffff : ::00.0
f3de0000-f3deffff : tg3
f3df0000-f3dfffff : ::00.0
f3df0000-f3dfffff : tg3
f3e00000-f3efffff : PCI Bus :
f3f00000-f3ffffff : PCI Bus :
f4000000-f7efffff : PCI Bus :
f4000000-f5ffffff : ::00.0
f6000000-f6ffffff : ::00.0
f7e00000-f7e1ffff : ::00.0
f7ffa000-f7ffa3ff : ::1a.
f7ffa000-f7ffa3ff : ehci_hcd
f7ffb000-f7ffb0ff : ::1f.
f7ffc000-f7ffffff : ::1b.
f7ffc000-f7ffffff : ICH HD audio
f8000000-fcffffff : reserved
f8000000-fbffffff : PCI MMCONFIG [bus -3f]
fe000000-fed003ff : reserved
fec00000-fec003ff : IOAPIC
fec80000-fec803ff : IOAPIC
fed00000-fed003ff : HPET
fed00000-fed003ff : PNP0103:
fed20000-fed9ffff : PCI Bus :
fedab410-fedab414 : iTCO_wdt
fee00000-feefffff : reserved
fee00000-fee00fff : Local APIC
ff97c000-ff97ffff : PCI Bus :
ff980000-ff980fff : PCI Bus :
ff980000-ff9803ff : ::1d.
ff980000-ff9803ff : ehci_hcd
ffb00000-ffffffff : reserved
-41fffffff : System RAM
例子4:显示进程的内存映像
$cat /proc/N/maps
显示效果:一共分6列,
列1:address: 0085d000-00872000 虚拟内存区域的起始和终止地址文件所占的地址空间
列2:perms:rw-p 权限:r=read, w=write, x=execute, s=shared, p=private(copy on write)
列3:offset: 00000000 虚拟内存区域在被映射文件中的偏移量
列4:dev: 03:08 文件的主设备号和次设备号
列5:inode: 设备的节点号,0表示没有节点与内存相对应
列6:name: /lib/ld-2.3.4.so 被映射文件的文件名
列1 列2 列3 列4 列5 列6
00400000-006bc000 r-xp fc: /usr/bin/python2.7
008bb000-008bc000 r--p 002bb000 fc: /usr/bin/python2.
008bc000- rw-p 002bc000 fc: /usr/bin/python2.
- rw-p :
01fa7000-02c15000 rw-p : [heap]
7f6ef306f000-7f6ef30af000 rw-p :
7f6ef30ef000-7f6ef3df0000 rw-p :
7f6ef3df0000-7f6ef3dfc000 r-xp fc: /usr/lib/python2./dist-packages/OpenSSL/SSL.so
7f6ef3dfc000-7f6ef3ffb000 ---p 0000c000 fc: /usr/lib/python2./dist-packages/OpenSSL/SSL.so
7f6ef3ffb000-7f6ef3ffc000 r--p 0000b000 fc: /usr/lib/python2./dist-packages/OpenSSL/SSL.so
7f6ef3ffc000-7f6ef4000000 rw-p 0000c000 fc: /usr/lib/python2./dist-packages/OpenSSL/SSL.so
内存:
$ps aux -p N
常驻内存RSS,将所有的进程的RSS相加显然是大于物理内存的。这是因为进程使用到了动态链接库是共享的,因此这分空间被重复多次计算了。
可以使用cat查看proc下面的详细内存信息
$cat /proc/N/smaps ###最详细的内存信息 $cat /proc/N/maps $cat /proc/N/statm