一、进程概念
进程是内核的一个功能,在Linux中,运行一个程序或命令可以出发一个事件而驱动一个PID,在linux系统中,系统只识别二进制程序文件,我们可以通过执行系统上的二进制程序来运行程序,进而产生进程。在linux系统中第一个进程是init程序,它是系统开机第一个加载的程序,用来支撑系统的正常运行的一个程序,内核启动的一个用户级进程。
1.进程优先级
进程优先级被分为系统优先级和实时优先级
系统优先级:数字越小,优先级越高
0-139(老版本操作系统如4,5)
各有140个运行队列和过期队列,当一个进程支执行完成后会将进程放到过期队列上来,如果一个进程的优先级低,进程执行了一会,系统将会把它丢到过期队列当中来。
实时优先级:99-0:值越大优先级越高
nice值:-20,19对应系统优先级100-139或99
2.进程状态
在linux中,进程是抢占式多任务的,进程的类型被分为:
守护进程:在系统引导过程中启动的进程,即跟终端无关的进程
前台进程:跟终端有关,通过终端启动的进程;需要注意的是,也可以吧前台启动的进程送往后台,以守护模式运行。
运行态: running进程正在运行中
就绪态:ready
睡眠态:sleeping
可中断:interruptable
不可中断:uninterruptable,通常是指被IO阻塞的进程,等待IO满足之前无法继续运行
停止态:stopped,暂停于内存中,但不会被调度,除非手动启动
僵死态:zombie,进程结束,父进程结束前,子进程不关闭
根据进程占用资源的多少可以将进程分为:
CPU密集型:对CPU占用率高的进程
IO密集型:等待I/O时间长的进程
3.进程管理
在linux系统中,有很多的进程都在运行,但其中有一个程序很重要,那该如何让这个最重要的程序先运行呢,所以这些情况下,我们都应该先查询系统当前运行的进程,此时我们可以通过一些进程的管理工具来获得进程的管理工具有:top,pstree,ps,pidof,pgrep,pkill,htop,glances,pmap,vmstate,dstat,iostat,sar,kill,jobs,bg,fg等
pstree:以显示当前系统上的进程树
ps:process state 进程状态
默认显示当前终端中的进程
命令格式:ps [options]
-a:所有与终端有关的进程
-x:所有与终端无关的进程,通常与-a选项一起使用,可列出教完整信息
-u:显示与进程所有者的信息
-f:显示进程的父进程
-l:较长、教详细的将该PID信息列出
-o 显示指定的信息如 pid(进程号),comm(命令),%cpu(cpu占用百分比),%mem(内存占用百分比),state(进程状态),tty(终端),euser(进程生效者),ruser(进程真正执行者)
组合选项
-ef
-e:显示所有进程
-f:显示完整格式程序信息
-eFH
-F:显示更完整格式的进程信息
-H:以进程层级格式显示进程相关信息
ps显示字段解释
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 19352 1552 ? Ss 15:41 0:01 /sbin/init
root 2 0.0 0.0 0 0 ? S 15:41 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 15:41 0:00 [migration/0]
root 4 0.0 0.0 0 0 ? S 15:41 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S 15:41 0:00 [stopper/0]
root 6 0.0 0.0 0 0 ? S 15:41 0:00 [watchdog/0]
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
-----------------------------------------------------------------------------------------------------------------------------
USER:用户
PID:进程ID
%CPU:占用cpu百分比
%MEM:占用内存百分比
VSZ:Virtual memory Size,虚拟内存集,线性内存
RSS:ReSident Size,常驻内存及
STAT:进程状态
R:running
s:interruptable sleeping
D:uninterruptable sleeping
T:stopped
Z:zombie
+:前台进程
l:多线程进程
N:低优先级进程
<:高优先级进程
s:session leader,会话进程首进程
START:进程起始时间
TIME:进程运行时长
COMMAND:运行进程的命令
ni:nice值
pri:priority优先级
psr:processor,cpu编号
rtprio:实时优先级
pgrep 搜索进程
pgrep [-flvx] [-d delimiter] [-n|-o] [-P ppid,...] [-g pgrp,...] [-s sid,...] [-u euid,...] [-U uid,...] [-G gid,...] [-t term,...] [pattern]
-u uid:进程生效者
-U uid:进程真正发起者(比如我普通用户运行passwd运行,可执行程序passwd有suid它是以root的身份来运行程序,但进程真正的发起者是普通用户)
-t terminal:与指定终端相关的进程
-l:显示进程名
-a:显示完整格式的进程名
-p pid:显示指定进程的子进程
示例:
pgrep -u hadoop 查找生效者是hadoop用户的进程
pgrep -t pts/2
pidof 根据程序名查找pid
命令格式:pidof [-s] [-c] [-x] [-m] [-o omitpid] [-o omitpid..] program [program..]
如pidof bash
uptime
显示当前时间,系统已启动的时间、当前上线人数,系统平均负载(1、5、10分钟的分军服在,一般不会超过1)
系统平均负载:在特定时间间隔内运行队列中的平均进程数
如果每个CPU内核当前活动的进程数不大于3,那么系统新能良好,如果CPU内核任务数大于5,这台机器性能有严重问题,如果主机是一个双核CPU的话,当Load Average为6的时候说明机器已经被充分使用了
20:49:12 up 5:07, 3 users, load average: 0.00, 0.02, 0.05
4.进程管理工具
top
top栏位信息介绍
us:用户空间
sy:内核控件
ni:调整nice时间
id:空闲
wa:I/O等待时间
hi:硬终端
si:软终端(模式切换)
st:被偷走的时间
PID:任务的进程ID
PPID:父进程ID
RUSER:进程真正执行者
UID:任务所有者ID
USER:任务所有者名称
GROUP:任务所有者群组名
TTY:终端
PR:优先级
%CPU:CPU使用率
%MEM:内存使用率
S:进程状态
TIME+:CPU时间,精确到秒
top命令有许多命令,当我们执行top命令后,在交互界面敲一下键会显示不同的效果
排序
P:以占据CPU百分比排序 %CPU
M:以占据内存百分比排序 %MEM
T:累计占据CPU时长,TIME+
首部信息显示:
uptime信息: l命令
tasks及cpu信息:t命令
cpu分别显示:1(数字)
memory信息: m命令
退出命令:q
修改刷新时间间隔: s #
终止指定进程: k pid
保存文件:W,默认保存在/root/.toprc文件中
选项:
-d #:指定刷新时间间隔,默认为3秒
-b:以批次方式显示
-n #:显示多少批次
htop命令该命令系统默认不会安装,需要从epel源上安装htop命令
命令格式: htop [-dChusv]
选项:
-d # :指定延迟时间
-u username:仅显示指定用户的进程
-s colume :以指定字段进行排序
子命令:(在执行htop命令后在进入界面输入一下子命令)
s:跟踪选定进程的系统调用
l:显示选定进程打开的文件列表
a:选定的进程绑定至某指定CPU核心
t:显示进程树
5.内存工具
vmstate命令:虚拟内存信息
vmstat[options] [delay [count]]
vmstat 2 5每两秒显示一次,一共显示五次,然后退出
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 1169128 32640 403716 0 0 8 1 12 9 0 0 100 0 0
1 0 0 1169048 32640 403720 0 0 0 0 37 26 0 0 100 0 0
0 0 0 1169048 32648 403720 0 0 0 6 46 48 0 0 100 0 0
0 0 0 1169112 32648 403720 0 0 0 16 42 33 0 0 100 0 0
1 0 0 1169112 32648 403720 0 0 0 0 40 26 0 0 100 0 0
栏位信息
procs
r:等待运行的进程个数,和核心数有关
b:处于不可中断睡眠态的进程个数(被阻塞的队列长度)
memory
swap:交换内存的使用总量
free:空闲屋里内存总量
buffer:用于缓冲的内存总量
cache:用于缓存的内存总量
swap
si:从磁盘交换内存的数据速率(kb/s)
so:从内存交换至磁盘的数据速率(kb/s)
io
bi:从块设备读入数据到系统的速率(kb/s)
bo:保存数据到块设备的速率(kb/s)
system
in:interrupts,中断速率,包括时钟
cs:context switch,进程切换速率
cpu
us:用户空间
sy:内核控件
ni:调整nice时间
id:空闲
wa:I/O等待时间
hi:硬终端
si:软终端(模式切换)
st:被偷走的时间
选项
-s:显示内存的统计数据
pmap:进程对应的内存映射
命令格式:pmap [ -x | -d ] [ -q ] pids...
-x:显示详细格式的信息
或者查看文件来显示此信息
cat /proc/pid/pmap pid进程编号
系统监控工具
glances
命令格式glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-P password] [--password] [-t refresh] [-f file] [-o output]
选项
-b:以Byte为单位显示网卡的数据速率
-d:关闭磁盘I/O模块
-f: /path/to/somefile:设定输入文件位置
-o {html|csv}:输出格式
-m:禁用mount模块
-n:禁用网络模块
-t #:延迟时间间隔
-l:每个CPU相关数据单独显示
C/S模式下运行glances
服务模式:
glances –s –B ip
客户端模式
glances –c ip
dstate命令,系统资源统计
命令格式: dstat [-afv] [options..] [delay [count]]
-c:显示CPU相关信息
-d:显示disk相关信息
-g:显示page相关统计信息
-m:显示内存相关统计信息
-n:显示网络相关统计信息
-p:显示进程相关统计信息
-r:显示io请求相关的同属数据
-s:显示swaped相关的统计数据
6. 进程管理工具
重要的信号
1)SINGHUP:让一个进程不用重启就可以重读其配置文件,并让新的配置信息生效
2)SIGINT:中止正在运行的进程相当于ctrl+c
9)SINGKILL:杀死正在运行的进程
15)SINGTERM:终止正在运行的进程,正常结束进程
18)SINGCONT:继续运行一个进程
19)SINGSTOP:后台休眠
指定信号的方法:
信号的数字标识:1,2,9
信号完整名称:SIGHUP
信号简写名称:HUP
杀死进程
kill命令
命令格式kill [-s signal|-p] [--] pid..
示例:
kill -1 120 使用1号信号重读该进程的配置文件
kill -9 120 强制杀死该进程
killall command(当某个命令运行多个进程时,想杀死该命令产生的全部进程)
pkill
命令格式:pgrep [-flvx] [-d delimiter] [-n|-o] [-P ppid,...] [-g pgrp,...] [-s sid,...] [-u euid,...] [-U uid,...] [-G gid,...]
-SIGNAL
-u uid: 生效者
-U uid :real user ,进程真正发起者
-t terminal:与指定终端相关的进程
-l:显示进程名
-a:显示整格式的进程名
-P pid:显示父进程为此处指定的进程的进程列表
示例:
pkill -u hadoop
pkill -t pts/3
二、作业管理
Linux的作业控制
前台作业:通过终端启动,且启动后一直占据终端
后台作业:可通过终端启动,但启动后即转入后台运行(释放终端)
运行中的作业 ctrl+z让作业运行与后台
command & 作业未启动是执行此操作让作业进入后台
后台作业虽然被送往后台运行,但依然与终端相关,退出终端,将关闭后台作业。
nohup command screen command 剥离与终端的关系,即使终端断开,也依然运行
jobs:查看所有作业
[root@server ~]# jobs
[1] Stopped vim
[2]- Stopped find / -name a
[3]+ Stopped vim
1.作业控制
fg[[%]JOB_NUM]:把指定的后台作业调回前台;
bg[[%]JOB_NUM]:让送往后台的作业在后台继续运行;
kill [%JOB_NUM]:终止指定的作业
当工作中需要同时运行多个进程,提高工作效率,可以这么干
vi all.sh
f1.sh&
f2.sh&
f3.sh&
(f1.sh&);(f2.sh&);(f3.sh&)
{ f1.sh& f2.sh& f3.sh& }
2.进程优先级调整
进程是存在优先级的,所谓优先级是指被执行的顺序,优先级越高,被执行的顺序越靠前,反之,越靠后
静态优先级:100-139
进程默认启动时的nice值为0,优先级为120
只有根用户才能降低nice值(提高优先性)
进程优先级的调整方法
nice命令
命令格式:nice [OPTION] [COMMAND [ARG]...] (程序未启动时)
nice -n -10 pid
renice
命令格式:renice [-n] priority [[-p] pid ...] [[-g] pgrp ...] [[-u] user ...]
renice –n -10 pid (进程已经运行)