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