15.进程管理 - xiaoxiaoxuegao/rhcsa GitHub Wiki
一.进程
1.process management
2.什么叫进程:运行中的程序才叫进程
1)程序是在硬盘里的,进程是在内存里的,
2)进程一定会消耗内存资源和CPU计算资源,因为对于一个OS来说最重要的就是内存和CPU这类的硬件资源
3)管理进程对os来说非常重要,若有不正常的process,我们会杀死不正常的进程
3.想要使用一个qq时,一个新的系统步骤-》1).下载 软件安装包(放在硬盘里)2).安装 3.) 删除安装包 4).打开 5).登录 6.)使用 4.硬件
1)硬盘:disk 断电数据还在,装完软件卡和它没关系,系统快是因为硬盘
2)内存:RAM 系统在这里 断电之后数据消失 装完软件卡和它有关系,内存肯定比硬盘快
3)软件在硬盘里的时候我们把它叫做程序,程序运行必须要在内存里进行,运行中的程序叫做进程
为什么程序要在内存里运行:因为cpu里也有存储器,遵循冯诺依曼体系架构(比训有的四大体系:输入系统 输出系统 存储器 cpu)
4)cpu:计算部件 存储部件(一级缓存L1 二级缓存L2 三级缓存L3)三级最慢,一般研究三级的,金丝做的,容量比内存小特别多 ,不能直接从硬盘里拿数据,而是从内存里拿数据,到L3再给L2再给L1,因为硬盘IO速度慢,cpu速度快.
lscpu->查看cpu
二.进程管理
1.什么是进程:进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并用一定的系统资源。
2.进程管理的作用
(1)判断服务器健康状态
(2)查看系统中所有进程
(3)“杀死”进程
3.进程查看
(1)BSD系统格式(与redhat区别参数可以不加-)
[root@rhel7-0 ~]# ps aux
①a表示显示所有前台进程(操作时是前台进程,桌面也是,前台进程只能有一个)
②x表示显示所有后台进程(最小化)
③u表示显示进程是由哪个用户产生的
(2)分析输出结果(ps aux|less)(静态查看进程)
注意:查看的是进程的静止状态,即在命令回车的一瞬间,该进程的状态(哪个终端产生的。。。) ①USER:该进程是由哪个用户产生的
②PID:进程的ID号
③%CPU:该进程占用CPU资源的百分比,占用越高,进程越耗费资源(看进程是否正常)
④%MEM:该进程占用物理内存的百分比,占用越高,进程越耗费资源
⑤VSZ:该进程占用虚拟内存的大小,单位KB(地位很低)
内存:虚拟内存+物理内存
虚拟内存:内存不够了也可以运行,但是会卡,因为会用算法计算哪些是不用的内存,会从硬盘里划出来一部分,叫虚拟内存,会把后台进程尽量往虚拟内存里放,把前台进程放到内存里
(商家卖手机说内存大超过8g的其实是硬盘,不是内存,手机内存要求高,系统在硬盘里,开机启动在内存里,消耗内存)
现在服务器不缺虚拟内存
⑥RSS:该进程占用实际物理内存的大小,单位KB
⑦TTY:该进程是在哪个终端中运行的。其中TTY1-TTY6代表本地控制台终端。TTY2-6是本地的字符界面终端,TTY1是图形终端,没安装图形界面就全都是控制台终端。PS/0-255代表虚拟终端(伪终端)。如果是“?”,则表示该进程是由内核直接产生,而不是任何的终端产生。
⑧STAT:进程状态。常见的状态有R:运行、S:睡眠、T:停止、s:包含子进程、+:位于后台
⑨START:该进程的启动时间
⑩TIME:该进程占用CPU的运算时间,注意不是系统时间
⑪COMMAND:产生此进程的命令名
(3)Linux标准命令格式(静态查看进程)
[root@rhel7-0 ~]# ps –le
①-l表示显示更详细的信息
②-e表示显示所有的进程
3.2查看系统健康状态(动态查看进程,前台进程)
(1)top命令
[root@rhel7-0 ~]# top [选项]
-d表示秒数,指定top命令每隔几秒更新,默认是3秒
3.2查看系统健康状态
(2)在top命令的交互模式当中可以执行的命令(高级操作):
①?或h:显示交互模式的帮助
②P:以CPU使用率排序,默认就是此项
③M:以内存的使用率排序
④N:以PID排序(进程的ID,一直往上加,被用过一次就不能再用了 )
⑤q:退出top
(3)top命令输出的头5行结果
①第一行是任务队列信息
top - 11:48:34 up 7:06, 2 users, load average: 0.06, 0.05, 0.07
(基本信息,系统当前时间,系统运行时间,登录几个用户,负载超过1认为1核cpu使用超过百分之百,超过2认为2核cpu使用超过100%,以此类推。。认为负载,服务器压力大)
①第二行是进程信息:当前系统进程总数,正在运行的进程 休眠的进程 ,暂停的进程,僵尸进程
1)父进程,子进程:当一个进程 A产生另一个进程B时(fork),A是B的父进程 B是A的子进程,正常情况下,父进程结束后,将会干死自己产生的子进程(否则会一直消耗资源),只有root和父进程可以关子进程,子进程帮助父进程完成工作,子进程不正常退出就是僵尸进程
2)僵尸进程:关不掉的进程
原因:a.软件开发太垃圾,父进程对子进程的控制力不强
b.可能病毒破坏了父进程和子进程之间的联系
3)解决:
a.当僵尸进程产生时第一件事儿就是尝试关掉
b.排查软件
c.重启
Tasks: 473 total, 2 running, 471 sleeping, 0 stopped, 0 zombie
①第三行是cpu信息
①第四行是物理内存信息
①第五行是交换分区(swap)信息(虚拟内存)
3.3查看进程树(查看静态进程)
(1)命令 pstree(可以查看父进程和子进程)的关系,而且非常透明
[root@rhel7-0 ~]# pstree [选项]
-p表示显示进程的PID
3.2查看系统健康状态
(2)输出结果
[root@rhel7-0 ~]# pstree
2*代表2个子进程
3.2查看系统健康状态
(3)-p参数 -p后面可以加ID
[root@rhel7-0 ~]# pstree -p
-p可以显示所有的子进程,并且显示PID
4.杀死进程
4.1使用kill命令终止进程
(1)kill命令 给进程发送信号
参数-l,查看所有进程信号
(2)kill –l 输出结果
(3)信号详解
列表中,编号为1 ~ 31的信号为传统UNIX支持的信号,是不可靠信号(非实时的) ,编号为32 ~ 63的信号是后来扩充的,称做可靠信号(实时信号)。不可靠信号和 可靠信号的区别在于前者不支持排队,可能会造成信号丢失,而后者不会。
(4)常用信号说明
1 SIGHUP重启进程 2 SIGSTOP停止进程 9 SIGKILL 强制杀死进程 15 SIGTERM 正常结束进程
(5)用法 kill + 进程ID或者 kill -9 强制终止 kill -15 == kill正常杀死 kill -1 重启 kill -2 停止 kill -18 恢复停止的进程
[root@circle ~]# kill -1 32411
重启PID为32411的进程
[root@circle ~]# kill -9 32425
强制终止PID为32425的进程
[root@circle ~]# kill -15 32452
相当于[root@circle ~]# kill 32452,正常结束PID为32452的进程
4.2使用killall命令终止进程
(1)killall命令
[root@circle ~]# killall [选项] [信号] 进程名
按照进程名杀死进程
①-i参数会询问是否要杀死某个进程
②-I参数会忽略进程名的大小写
(2)killall命令用法
[root@circle ~]# pstree -p | grep httpd
4.3使用pkill命令终止进程
(1)pkill命令
[root@circle ~]# pkill [选项] [信号] 进程名
按照进程名杀死进程
-t + 终端号:按照终端号踢出用户
(2)pkill命令用法 t表示终端
踢出用户 : pkill -9 -t +用户(tty2tty6 pts/0pts/6)
伪终端是pts :0是图形界面
[root@circle ~]# w
03:19:04 up 14:29, 3 users, load average: 0.03, 0.02, 0.05 USER TTY LOGIN@ IDLE JCPU PCPU WHAT root :0 09Jan17 ?xdm? 21:32 0.49s gdm-session-worker [pam/gdm-password] root pts/0 03:11 0.00s 0.09s 0.00s w root pts/1 03:19 3.00 s 0.03s 0.03s -bash [root@circle ~]# pkill -9 -t pts/1
[root@circle ~]# w 查看当前在哪个终端
注意: 建议httpd服务还是使用正常的systemctl stop httpd.service 来停止服务,只有在正常停止不生效后才建议使用kill命令终止进程
ctrl+c:终止进程 ctrl+z :暂停进程
在rhce7系统中,systemd作为系统启动的第一个进程
在rhce5,6系统中,init作为系统启动的第一个进程
查看cpu信息 :cat /proc/cpuinfo
关机,右键设置-》处理器的虚拟化打开
三.作业调度jobs
1.作业是针对某个shell的
前台进程 后台进程
2.ctrl+c:终止进程 ctrl+z :暂停进程
打一个jobs命令就可以看见暂停的后台的进程
3.background bg %作业号 ->让作业在后台运行
frontground fg %作业号->让作业在前台运行
kill -信号 %作业号 向作业发送信号
命令 +& 在后台运行
4.有些命令或程序只能在前台运行,强行让他们在后台运行可能户出问题
top & 让top在后台运行-》出错,因为top不能在后台运行
5.让父进程关闭之后子进程还在,不想让父进程关闭子进程也关闭:nohup 命令
例如:nohup firefox