内核的功用有进程管理、文件系统、网络功能、内存管理、驱动程序和安全功能。Linux内核存储进程信息的固定格式为task struct,多个任务的task struct组成的链表为task list。
/proc/目录存放内核中的状态信息。可设置内核参数的值从而调整内核运行特性的参数,内核参数存放于/proc/sys/目录下,状态变量用于输出内核中的统计信息或状态信息,仅用于查看信息。
进程文件存放于/proc/# 文件中,#是PID编号。
(1)进程创建过程
init进程是初始化进程,第1个进程,负责一切用户空间管理的进程。init由kernel创造,除了init之外,每一个进程都由其父进程创建,用命令fork(),clone()等。
(2)进程优先级
0-139:共140个优先级,其中1-99的优先级为实时优先级,数字越大,优先级越高,100-139的优先级为静态优先级,数字越小,优先级越高。
(3)Nice值
Nice值为-20-19,对应优先级100-139,-20对应100,19对应139,可以通过调整Nice值来改变优先级,普通用户只可以向Nice值高的方向调整,即向进程优先级大(低)的方向调整,管理员不受限制。
(4)进程类型
Linux内核是抢占式多任务的内核。因此进程类型可分为守护进程和前台进程。守护进程(daemon)为在系统引导过程中启动的进程,是跟终端无关的进程,前台进程是跟终端相关,通过终端启动的进程,也可把在前台启动的进程送往后台,以守护模式运行,例如service命令启动进程就可以以后台方式运行。
(5)进程状态
运行态(running),就绪态(ready),睡眠态分为可中断睡眠态(interruptable)和不可中断睡眠态(uninterruptable)停止态(stopped,暂停于内存中,但不会被调度,除非手动启动之)、僵死态(zombie)。
(6)进程的分类
CPU-Bound,CPU密集型,优化性能需要分配CPU时间多些;
IO-Bound,IO密集型,优化性能需要分配优先级高些。
(7)启动进程的方式
系统启动过程中自动启动的进程是与终端无关的进程,用户通过终端启动的进程是与终端相关的进程。
(1)pstree命令
该命令用于显示进程的树状结构。
(2)ps命令
该命令用于显示当前运行进程的快照。
ps [options]:ps命令选项有三种风格:
1 UNIX options, which may be grouped and must be preceded by a dash.
2 BSD options, which may be grouped and must not be used with a dash.
3 GNU long options, which are preceded by two dashes.
选项:
a:所有与终端相关的进程;
x:所有与终端无关的进程;
u:以用户为中心组织进程状态信息显示;
ax:查看系统中的所有进程;
ps ax命令显示结果:带[]的为内核线程;
pstree命令显示结果:大多为进程;
1 常用组合之一:aux
VSZ:虚拟内存集,即占用的虚拟内存大小,即进程在虚拟内存空间中真正用来存储数据的大小。
RSS:Resident Size,常驻内存集,坚决不能放在交换内存的内容。
STAT:
R:running
S:interruptable sleeping
D:uninterruptable sleeping
T:Stopped
Z:zombie
+:前台进程
l:多线程进程
N:低优先级进程
<:高优先级进程
s:session leader 会话领导者,如shell进程
-e:显示所有进程,相当于ax
-f:显示完整格式的进程信息
2 常用组合之二:-ef
显示结果:PPID父进程ID,init(PID=1)进程的父进程为PID为0的进程
-F:显示完整格式的进程信息;比-f更加完整的信息;
C: cpu utilization,CPU利用率;
PSR:运行于哪颗CPU之上
-H:以层级结构显示进程的相关信息;
3 常用组合之三:-eFH
4 常用组合之四:-eo, axo
o field1, field2,…:自定义要显示的字段列表,以逗号分隔;
常用的field:pid, ni, pri, psr, pcpu, stat, comm, tty, ppid, rtprio
ni:nice值;
priority:priority, 优先级;
rtprio:real time priority,实时优先级;
pcpu:cpu利用率;
comm:由哪个程序启动的;
(3)kill
(4)pgrep [options] pattern
该命令用于实现进程过滤。
-u uid:effective user,显示进程以什么用户的身份运行,可以切换;
-U uid:real user,显示以该用户启动的进程,显示指定用户的进程;
-t TERMINAL:与指定的终端相关的进程;
-l:显示进程名;
-a:显示完整格式的进程名;包括进程ID、进程名、参数列表;
-P pid:显示此进程的子进程;仅显示直接子进程,不加选项表示命令中有该字符串的进程;
[root@centos7 ~]# pgrep -U postfix
2308
2309
[root@centos7 ~]# ps aux | grep postfix
root 2254 0.0 0.1 93208 1696 ? Ss 14:04 0:00 /usr/libexec/postfix/master -w
postfix 2308 0.0 0.1 93312 1840 ? S 14:04 0:00 pickup -l -t unix -u
postfix 2309 0.0 0.1 93380 1876 ? S 14:04 0:00 qmgr -l -t unix -u
root 4620 11.0 0.0 112648 952 pts/0 R+ 15:18 0:00 grep --color=auto postfix
(5)pidof命令
该命令用于根据进程名,取其pid,一个进程名对应的pid可能不止一个。
(6)top命令
该命令用于显示Linux进程。
排序方式:
P:以占据CPU百分比排序;
M:以占据内存百分比排序;
T:累积占用CPU时间排序;
首部信息:
uptime信息:l命令开启或关闭,top命令的第一行;
tasks及cpu信息:t命令开启或关闭;
内存信息:m命令开启或关闭;
退出命令:q;
修改刷新时间间隔:s;
终止指定的进程:k;
选项:
-d #:指定刷新时间间隔,默认为3秒;
-b:以批次方式显示;
-n #:显示多少批次;
(7)uptime命令
该命令用于显示系统时间、运行时长及平均负载(过去1分钟、5分钟和15分钟的平均负载)和等待运行的进程队列的长度。
(8)htop命令
安装htop:yum install htop -y
选项:
-d #:指定延迟时间间隔;
-u UserName:仅显示指定用户的进程;
-s COLUME:以指定字段进行排序;
子命令:
l:显示选定的进程打开的文件列表;
s:跟踪选定的进程的系统调用;
t:以层级关系显示各进程状态;
a:将选定的进程绑定至某指定的CPU核心;
(9)vmstat命令
该命令用于显示虚拟内存统计信息。
vmstat [options] [delay [count]]
procs:
r:等待运行的进程的个数;CPU上等待运行的任务的队列长度;
b:处于不可中断睡眠态的进程个数;被阻塞的任务队列的长度;
memory:
swpd:交换内存使用总量;
free:空闲的物理内存总量;
buffer:用于buffer的内存总量;
cache:用于cache的内存总量;
swap:
si:数据进入swap中的数据速率(kb/s);
so:数据离开swap的速率(kb/s);
io:
bi:从块设备读入数据到系统的速度(kb/s);
bo:保存数据至块设备的速率(kb/s);
system:
in:interrupts,中断速率;
cs:context switch, 上下文切换的速率;
cpu:
us:user space;
sy:system;
id:idle;
wa:wait;
st: stolen;
选项:
-s:显示内存统计数据;
(10)pmap命令
该命令用于查看进程的内存映射。
pmap [options] pid [...]
-x:显示详细格式的信息;
另一种查看方式:cat /proc/PID/maps。
(11)glances命令
该命令是一个跨平台的基于光标的监控管理工具,是bash shell内建命令。
常用选项:
-b:以Byte为单位显示网卡数据速率;
-d:关闭磁盘I/O模块;
-m:关闭mount模块;
-n:关闭network模块;
-t #:刷新时间间隔;
-1:每个cpu的相关数据单独显示;
-o {HTML|CSV}:输出格式;
-f /PATH/TO/SOMEDIR:设定输出文件的位置;只需指到文件所在目录;
C/S模式下运行glances命令:
服务模式:glances -s -B IPADDR
IPADDR:本机的某地址,用于监听;
客户端模式:glances -c IPADDR
IPADDR:是远程服务器的地址;
(12)dstat命令
该命令是一个精巧的系统资源统计工具。
dstat [-afv] [options..] [delay [count]]
常用选项:
-c, --cpu:显示cpu相关信息;
-C #,#,…,total
-d, --disk:显示磁盘的相关信息
-D sda,sdb,…,total
-g:显示page相关的速率数据;
-m:Memory的相关统计数据;
-n:Interface的相关统计数据;
-p:显示process的相关统计数据;
-r:显示io请求的相关的统计数据;
-s:显示swapped的相关统计数据;
–top-cpu:显示最占用CPU的进程;
–top-io:最占用io的进程;
–top-mem:最占用内存的进程;
–top-lantency:延迟最大的进程;
(13)kill命令
该命令用于向进程发送信号,以实现对进程管理的功能。
显示当前系统的可用信号:kill -l [signal]
每个信号的标识方法有三种:
1)信号的数字标识;
2)信号的完整名称;
3)信号的简写名称;
向进程发信号:kill [-s signal|-SIGNAL] pid...
常用信号:
1)SIGHUP:无须关闭进程而让其重读配置文件;
2)SIGINT:终止正在运行的进程,相当于Ctrl+c;
9)SIGKILL:杀死运行中的进程;进程强行杀死,正在写未关闭的文件可能会损坏;
15)SIGTERM:终止运行中的进程;
18)SIGCONT:继续;kill -18 49266 将停止的进程继续运行,可以是在后台;
19)SIGSTOP:停止,将进程送入后台运行;相当于Ctrl+Z。
(14)killall命令
该命令用于通过进程名杀死进程。
killall [-SIGNAL] program
例:killall httpd
(15)调整进程优先级
可通过nice值调整的优先级范围:100-139,分别对应于:-20-19。
进程启动时,其nice值默认为0,其优先级是120,仅管理员可调低nice值。
nice命令:以指定的nice值启动并运行命令。
# nice [OPTION] [COMMAND [ARGU]...]
选项:
-n NICE
renice命令:调整运行中的指定进程的NICE值。
# renice [-n] NICE PID...
查看Nice值和优先级命令:ps axo,pid,ni,priority,comm。
(1)作业
前台作业(foregroud):通过终端启动,且启动后会一直占据终端;
后台作业(backgroud):可以通过终端启动,但启动后即转入后台运行(释放终端)。
(2)如何让作业运行于后台?
1)运行中的作业,Ctrl+z可送往后台。
注意:送往后台后,作业会转为停止态;
2)尚未启动的作业,# COMMAND &
,可在运行时在后台运行。
注意:此类作业虽然被送往后台,但其依然与终端相关,如果终端进程终止,与终端相关的进程也会终止,如果希望把送往后台的作业剥离与终端的关系,则把作业转为与终端无关的方式:# nohup COMMAND &
。
(1)查看所有的作业
# jobs
(2)可实现作业控制的常用命令
# fg [[%]JOB_NUM]
:把指定的作业调回前台;
# bg [[%]JOB_NUM]
:让送往后台的作业在后台继续运行;
# kill %JOB_NUM
:终止指定的作业;作业加%,进程不加%;