进程管理
知识要点
认识进程
进程和程序的关系
进程相关操作
查看系统性能
进程是什么
程序
保存在硬盘、光盘等介质中的可执行代码和数据
是静态保存的代码
进程
在CPU及内存中运行的动态执行的程序代码
进程是程序运行的实例
同一个程序可能对应多个进程
子进程和父进程
INIT进程是系统中第一个进程,PID永远是1
[root@localhost ~]# ps -f
UID PID PPID C STIME TTY TIME CMD
root 10872 10870 0 13:17 pts/3 00:00:00 -bash
root 11267 10872 0 16:36 pts/3 00:00:00 bash
进程相关操作
PS命令
用途:查看静态的进程统计信息
格式:ps aux
ps -elf
常用命令选项
- ax:显示所有进程信息
- u:使用以用户为主的格式输出进程信息
- -e:显示系统内的所有进程信息
- -l:使用长格式显示进程信息
- -f:使用完整的格式显示进程信息
ps aux:
- USER 进程的用户;
- PID 进程的ID;
- %CPU 进程占用的CPU百分比;
- %MEM 占用内存的百分比;
- VSZ 该进程使用的虚拟内存量(KB);
- RSS 该进程占用的物理内存量(KB);
- TTY 该进程在哪个终端上运行(登陆者的终端位置),若与终端无关,则显示(?)。若为pts/0等,则表示由网络连接主机进程;
- STAT 进程状态
- START 该进程启动时间;
- TIME 该进程实际使用CPU运行的时间;
- COMMAND 命令的名称和参数;
ps -elf:
- F 进程的flag, 4 代表使用者为 super user
- S 进程状态
- UID 进程的用户;
- PID 进程的ID;
- PPID 父进程的ID
- C CPU利用率,以整数表示
- PRI Priority的缩写
- NI Nice的缩
- PRI/NI 代表此进程被 CPU 所执行的优先顺序,数值越小代表该进程越快被 CPU 执行。
- ADDR 指出该进程内存的地址,如果是 running的程序,一般就是 "-"
- SZ 占用内存大小;
- WCHAN 是否正在运作当中,若为 - 表示正在运作
- STIME 进程的启动时间
- TTY 该进程在哪个终端上运行(登陆者的终端位置)
- TIME 该进程实际使用CPU运行的时间;
- CMD 命令的名称和参数;
top命令
用途:查看动态的进程排名信息
P:按%CPU排序
M:按%MEM排序
空格:马上刷新
[root@localhost ~]# top
top - 06:08:48 up 4 days, 6:57, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 60 total, 1 running, 59 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.3% us, 0.7% sy, 0.0% ni, 97.4% id, 0.4% wa, 0.1% hi, 1.1% si
Mem: 191228k total, 171424k used, 19804k free, 19436k buffers
Swap: 265064k total, 1284k used, 263780k free, 120480k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6779 root 16 0 2536 832 668 R 3.8 0.4 0:00.04 top
1 root 16 0 2648 604 520 S 0.0 0.3 0:13.54 init
2 root 34 19 0 0 0 S 0.0 0.0 0:00.07 ksoftirqd/0
top - 01:06:48 up 1:22, 1 user, load average: 0.06, 0.60, 0.48
- 01:06:48 当前时间
- up 1:22 系统运行时间,格式为时:分
- 1 user 当前登录用户数
- load average: 0.06, 0.60, 0.48 系统负载,即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
w和uptime 命令也能看到这些信息
Tasks:
29 total, 1 running, 28 sleeping, 0 stopped, 0 zombieCpu(s): 0.3% us, 1.0% sy, 0.0% ni, 98.7% id, 0.0% wa, 0.0% hi, 0.0% si, 0.0%st
- total 进程总数
- running 正在运行的进程数
- sleeping 睡眠的进程数
- stopped 停止的进程数
- zombie 僵尸进程数
- Cpu(s):
- 0.3%us 用户空间占用CPU百分比
- 1.0% sy 内核空间占用CPU百分比
- 0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比
- 98.7% id 空闲CPU百分比
- 0.0% wa 等待输入输出的CPU时间百分比
- 0.0%hi:硬件CPU中断占用百分比
- 0.0%si:软中断占用百分比
- 0.0%st:虚拟机占用百分比
Mem:
191272k total, 173656k used, 17616k free, 22052k buffersSwap: 192772k total, 0k used, 192772k free, 123988k cached
- Mem:
- 191272k total 物理内存总量
- 173656k used 使用的物理内存总量
- 17616k free 空闲内存总量
- 22052k buffers 用作内核缓存的内存量
- Swap:
- 192772k total 交换区总量
- 0k used 使用的交换区总量
- 192772k free 空闲交换区总量
- 123988k cached 缓冲的交换区总量,内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小,相应的内存再次被换出时可不必再对交换区写入。
相关信息
- PID 进程id
- USER 进程所有者的用户名
- PR 优先级
- NI 负值表示高优先级,正值表示低优先级
- VIRT 进程使用的虚拟内存总量,单位kb
- RES 进程使用的、未被换出的物理内存大小,单位kb
- SHR 共享内存大小,单位kb
- S 进程状态
- %CPU 使用的CPU百分比
- %MEM 使用的物理内存百分比
- TIME+ 使用的CPU时间总计,单位1/100秒
- COMMAND 命令名
pstree命令
用途:以树型结构显示各进程间的关系
常用命令选项:
[root@localhost ~]# pstree -p
init,1
├─acpid,2866
├─atd,3060
├─auditd,2516
│ ├─python,2518 /sbin/audispd
│ └─{auditd},2517
├─automount,2842
……
pgrep命令
用途:根据特定条件查询进程PID信息
常用命令选项:
[root@localhost ~]# pgrep "init"
1
[root@localhost ~]# pgrep -l "log"
2538 syslogd
2541 klogd
3221 login
[root@localhost ~]# pgrep -l -u teacher -t tty1
27483 bash
27584 vim
进程的状态
- D 无法中断的休眠状态(通常 IO 的进程);
- R 正在运行,在可中断队列中;
- S 处于休眠状态,静止状态;
- T 停止或被追踪,暂停执行;
- W 进入内存交换(从内核2.6开始无效);
- X 死掉的进程;
- Z 僵尸进程不存在但暂时无法消除;
- W: 没有足够的记忆体分页可分配
- WCHAN 正在等待的进程资源;
- <: 高优先级进程
- N: 低优先级进程
- L: 有记忆体分页分配并锁在记忆体内 (即时系统或捱A I/O),即,有些页被锁进内存
- s 进程的领导者(在它之下有子进程);
- l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads);
- + 位于后台的进程组;
进程优先级设置
Linux内核的基本任务是调度进程
每个进程受两个参数影响其调度
优先级(priority):内核控制动态变化
- 值越小越早被cpu执行
- 用户无法直接调整数值大小
niceness:表示进程可被执行的优先级的修正数值 ,可手工修改
- 与priority有关
- 优先级有正负之分(-20 -19)
- 加入nice值后 PRI(新) = PRI(老) + nice
- root可以设置nice值范围(-20 - 19)
- 普通用户可以设置nice值范围(0- 19)
nice值越大,优先级越低
用nice命令新的nice(新开启的进程)
- 以新的nice来启动命令
- nice -10 vi & 设置nice值为10
- nice --10 vi & 设置nice值为-10
用renice命令设置新nice(已经存在的进程)
- renice 10 15132 设置nice值为10
- renice -10 15132 设置nice值为-10
用top命令修改进程的优先级
- 先输入r,然后输入pid,最后输入优先级
作业控制
手工启动
- 前台启动:用户输入命令,直接执行程序
- 后台启动:在命令行尾加入“&”符号
[root@localhost ~]# cp /dev/cdrom mycd.iso &
[1] 28454 //后台作业号为1,PID号为28454
jobs命令查看作业
- +:最新放到后台的进程
- - :仅次于最新放到后台的进程
fg命令
- 将处于后台的进程恢复到前台运行,需指定作业号
- 不指定作业号,将恢复有“+”标记的进程
[root@localhost ~]# jobs
[1]- Stopped cp /dev/cdrom mycd.iso
[2]+ Stopped top
[root@localhost ~]# fg 1
Ctrl + Z组合键
- 将当前进程挂起,即调入后台并停止执行
bg命令
- 将后台停止的进程,在后台重新运行
kill命令
软中断信号,简称信号。
是进程间通信机制中唯一的异步通信机制,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件。信号机制除了基本通知功能外,还可以传递附加信息。
- kill -l列出Linux系统支持的信号种类
发送信号的原因
- 硬件异常
- 软件状态
- 终端中断
kill命令用来发送信号
- kill -信号代码 PID
进程收到信号后采取的行动
- 终止
- 忽略信号
- 挂起
用户常用的信号
kill命令取消后台作业
- kill -9 PID
- kill -9 %作业号
kill、killall命令
- kill用于终止指定PID号的进程
- killall用于终止指定名称的所有进程
[root@localhost ~]# pgrep -l "portmap"
2869 portmap
[root@localhost ~]# kill -9 2869
[root@localhost ~]# killall -9 vim
[1]- 已杀死 /usr/bin/vim file1
[2]- 已杀死 /usr/bin/vim file2
pkill命令
pkill命令
- 用途:根据特定条件终止相应的进程
常用命令选项:
- -u:根据进程所属的用户名终止相应进程
- -t:根据进程所在的终端终止相应进程
[root@localhost ~]# w | grep -v "root"
14:10:10 up 6:08, 4 users, load average: 0.00, 0.01, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
teacher tty1 - 14:04 5:34 0.16s 0.16s -bash
hack pts/1 173.17.17.174 14:05 4:32 0.17s 0.17s -bash
[root@localhost ~]# pkill -9 -t pts/1
[root@localhost ~]# w | grep -v "root"
14:12:22 up 6:10, 3 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
teacher tty1 - 14:04 7:46 0.16s 0.16s -bash
系统性能监控 —— 查看内存使用情况
cache:缓存从硬盘读取出来的数据
buffer:缓存需要写入硬盘的数据
free命令
- 显示系统的物理内存和交换空间的使用情况
- -m:以MB的形式显示内存信息
[root@localhost ~]# free
total used free shared buffers cached
Mem: 515600 211320 304280 0 27264 145852
-/+ buffers/cache: 38204 477396
Swap: 1048568 0 1048568
top命令
Mem: 1035140k total, 1020560k used, 14580k free, 86504k buffers
Swap: 522104k total, 0k used, 522104k free, 771528k cached
内存监控
- /proc/meminfo文件
[root@localhost ~]# cat /proc/meminfo
MemTotal: 1035140 kB
MemFree: 15064 kB
Buffers: 86204 kB
Cached: 771528 kB
/proc/sys/vm/drop_caches (since Linux 2.6.16)
Writing to this file causes the kernel to drop clean caches,
dentries and inodes from memory, causing that memory to become free.
To free pagecache, use echo 1 > /proc/sys/vm/drop_caches;
to free dentries and inodes, use echo 2 > /proc/sys/vm/drop_caches;
to free pagecache, dentries and inodes, use echo 3 >
/proc/sys/vm/drop_caches.
Because this is a non-destructive operation and dirty objects
are not freeable, the user should run sync(8) first.
/proc是一个特殊文件系统,我们可以通过对它的读写操作,来作为与kernel实体间进行通信的一种手段.也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出调整.那么我们可以通过调整/proc/sys/vm/drop_caches来释放内存
CPU性能
- uptime:运行时间,登录用户数,CPU平均负载
- top:
iostat命令
- 用于查看系统磁盘I/O统计信息
- 由软件包sysstat-7.0.0-3.el5.i386.rpm提供
- sysstat还提供了 mpstat 命令,用于显示进程负载信息
[root@localhost ~]# iostat -dkt 5
Linux 2.6.18-8.el5 (localhost.localdomain) 2009年05月24日
Time: 16时17分49秒
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 1.28 15.12 6.54 167183 72314
sdb 0.83 11.95 1.95 132182 21526
dm-0 2.40 14.95 6.54 165325 72312
dm-1 0.01 0.04 0.00 456 0
hdc 0.02 0.07 0.00 746 0
网口资源的信息:
[root@localhost ~]# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:0C:29:43:F8:FD
inet addr:172.16.88.188 Bcast:172.16.255.255 Mask:255.255.0.0
inet6 addr: fe80::20c:29ff:fe43:f8fd/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:230179 errors:0 dropped:0 overruns:0 frame:0
TX packets:23470 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:17195989 (16.3 MiB) TX bytes:18550956 (17.6 MiB)
[root@localhost ~]# ethtool eth0
Settings for eth0:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Speed: 1000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
MDI-X: off (auto)
Supports Wake-on: d
Wake-on: d
Current message level: 0x00000007 (7)
drv probe link
Link detected: yes
[root@localhost ~]# mpstat
Linux 2.6.18-8.el5 (localhost.localdomain) 2009年05月25日
05时18分11秒 CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s
05时18分11秒 all 0.45 0.02 1.93 3.08 0.02 0.07 0.00 94.43 1010.03
[root@localhost ~]# mpstat
Linux 2.6.32-642.el6.x86_64 (localhost.localdomain) 01/08/2019 _x86_64_ (4 CPU)
02:18:18 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
02:18:18 PM all 0.20 0.00 0.14 0.23 0.00 0.02 0.00 0.00 99.41
/、查看某一块核
[root@localhost ~]# mpstat -P 1
Linux 2.6.32-642.el6.x86_64 (localhost.localdomain) 01/08/2019 _x86_64_ (4 CPU)
02:18:57 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
02:18:57 PM 1 0.73 0.00 0.16 0.13 0.00 0.05 0.00 0.00 98.93
sar
查看网络流量资源信息
[root@localhost ~]# sar -n DEV
本章总结
理解进程的概念
掌握基本的进程查看命令
掌握进程优先级的配置
掌握管理作业的相关命令
查看CPU信息:
top
ps -ef
ps -aux
mpstat
cat /proc/cpuinfo
内存:
top
iostat -x
vmstat