一、学习路线如下:
二、了解进程
1.什么是进程?
进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。
进程具有自己的生命周期和不同的状态。
2.进程的特点
1)独立性。
进程是系统中独立存在的实体,它可以拥有自己的独立资源,每一个进程都有自己的私有地址空间;在没有经过进程本身允许的情况下,一个用户进程不可以直接访问其他进程的地址空间。
2)动态性
进程与程序的区别在于,程序只是一个静态的指令集合,而进程是一个正在系统中活动的指令集合;进程具有自己的生命周期和各种不同的状态。
3)并发性
多个进程可以在单个处理器上并发执行,多个进程之间不会互相影响。
3.进程的生命周期
父进程,复制自己的地址空间(fork)创建一个新的(子)进程结构。每个新进程分配一个唯一的进程 ID (PID),满足跟踪安全性之需。PID 和 父进程 ID (PPID)是子进程环境的元素,任何进程都可以创建子进程,所有进程都是第一个系统进程的后代:Centos5/6: init Centos7: systemd
子进程,继承父进程的安全性身份、过去和当前的文件描述符、端口和资源特权、环境变量,以及程序代码。随后,子进程exec 自己的程序代码。通常,父进程在子进程运行期间处于睡眠(sleeping)状态。当子进程完成时发出(exit)信号请求,在退出时, 子进程会关闭或丢弃了其资源环境,剩余的部分称之为僵停(僵尸Zombie)。父进程在子进程退出时收到信号而被唤醒,清理剩余的结构,然后继续执行其自己的程序代码。
三、进程信息的查看
1.ps命令
常用组合:
ps aux #查看系统中所有进程,使用BSD操作系统格式
ps -le #查看系统中所有进程,使用linux标准命令格式
常用选项:
a 显示当前终端下的所有进程,包括其他用户的进程
u 显示进程拥有者、状态、资源占用等的详细信息(注意有“-”和无“-”的区别)
x 显示没有控制终端的进程。通常与a这个参数一起使用,可列出较完整信息
o 自定义打印内容
-e 显示所有进程。
-f 完整输出显示进程之间的父子关系
-l 较长、较详细的将该进程的信息列出
[root@jiangfeng1 ~]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 19348 1560 ? Ss 02:24 0:01 /sbin/init root 2 0.0 0.0 0 0 ? S 02:24 0:00 [kthreadd] ………………
ps命令的输出
USER:该进程是由哪个用户产生的; PID:进程的ID号; %CPU:该进程占用CPU资源的百分比,占用越高,进程越耗资源; %MEM:该进程占用物理内存的百分比,占用越高,进程越耗资源; VSZ:该进程占用虚拟内存的大小,单位KB; RSS:该进程占用实际物理内存的大小,单位KB; TTY:该进程是在哪个终端运行的。 STAT:进程状态。 R:运行 S:睡眠 T:停止状态 s:包含子程序 +:位于后台 START:该进程的启动时间 TIME:该进程占用CPU的运算时间 COMMAND:产生此进程的命令名
2.top命令
top [选项]
-d 秒数:指定top命令每隔几秒更新。默认是3秒
-b :使用批处理模式输出。一般和“-n”选项合用
-n 次数 :指定top命令执行的次数。
在top命令的交互模式当中可以执行的命令:
?或h :显示交互模式的帮助
P :以CPU使用率排序,默认就是此项
M :以内存的使用率排序
N :以PID排序
q :退出top
top - 22:33:23 up 3:13, 2 users, load average: 0.00, 0.01, 0.05 Tasks: 93 total, 1 running, 92 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.2 us, 0.2 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 1867048 total, 1566448 free, 96856 used, 203744 buff/cache KiB Swap: 4194300 total, 4194300 free, 0 used. 1588808 avail Mem 第一行:系统当前时间 ; 系统的运行时间 ; 当前登录了两个用户 ; 系统在之前1分钟,5分钟,15分钟的平均负载。一般认为小于1时,负载较小。如果大于1,系统已经超出负荷。
第二行:系统中得进程总数 ; 正在运行的进程数 ; 睡眠的进程 ; 正在停止的进程 ; 僵尸进程
第三行:用户模式占用的cpu百分比 ; 系统模式占用的cou百分比 ; 改变过优先级的用户进程占用的cpu百分比 ; 空闲CPU的CPU百分比 ; 等待输入/输出的进程的占用CPU百分比 ; 硬中断请求服务占用的CPU百分比 ; 软中断请求服务占用的CPU百分比 ; st(Steal time)虚拟时间百分比。就是当有虚拟机 时,虚拟CPU等待实际CPU的时间百分比(注:CPU占用率一般不能高于80%)
第四行:整体内存 ; 使用的内存 ; 空闲的内存 ; 缓冲
第五行:交换分区的总大小 ; 使用的交换分区的大小 ; 空闲交换分区的大小 ; 作为缓存的交换分区的大小 注: 缓冲:加速数据的写入 缓存:加速数据的读取
四、修改进程的优先级
Linux操作系统是一个多用户、多任务的操作系统,Linux系统中通知运行着非常多的进程。但是CPU在同一个时钟周期内只能运算一个指令。进程优先级决定了每个进程处理的先后顺序。
[root@jiangfeng1 ~]# ps -le | head F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 0 1 0 0 80 0 - 4837 poll_s ? 00:00:01 init 1 S 0 2 0 0 80 0 - 0 kthrea ? 00:00:00 kthreadd 1 S 0 3 2 0 -40 - - 0 migrat ? 00:00:00 migration/0
PRI代表Priority,NI代表Nice。这两个值都是优先级,数字越小代表该进程优先级越高
注:用户只能更改Nice,不能更改Priority
NI的值得范围是-20到19
普通用户调整NI的范围是0到19,而且只能调整自己的进程
普通用户只能调高NI值,而不能降低
root用户才能设定进程NI值为负值,而且可以调整任何用户的进程
PRI(最终值)=PRI(原始值)+NI
1.调整正在运行进程的优先级
1)在top中修改
在top中按’r’,输入你想要调整的PID,再输入想要更改的ni值
2)命令行使用renice调整
renice NI值 PID
实例:
[root@jiangfeng1 ~]# renice -10 2972 2972: old priority 0, new priority -10 [1]+ Stopped top
2.程序运行时指定优先级(nice)
[root@jiangfeng1 ~]# nice -n -5 sleep 500 & [2] 3025 [root@jiangfeng1 ~]# ps axo command,pid,priority,nice | grep sleep sleep 500 3025 15 -5 grep sleep 3040 20 0
五、进程的运行状态控制
用户通过给进程发送信息来控制进程的状态。
常见的信号如下:
杀死进程的命令:
1.kill -HUP PID
2.killall [选项][信号] 进程名
-i:交互式
-I:忽略进程名的大小写
3.pkill [选项] [信号] 进程名
-t:终端号
4.杀死用户进程
注:只能超级用户才能踢出用户
六、进程的其他命令
# jobs 查看当前终端后台的进程 # fg 把后台进程放到前台来运行 # bg 把后台暂停的进程放到后台运行 # fg %1 将作业1调回到前台 # bg %2 把后台编号为2的进程恢复运行状态