4. RedHat认证-进程管理
1.进程概念
进程就是正在运行中的程序或者命令
每一个进程都是运行的实体,都有自己的地址空间,并占有一定的资源空间
程序消耗的是磁盘资源、进程消耗的是内存和CPU资源
进程会占用四类资源(CPU 、内存、磁盘、网络)
进程至少会占用 CPU、内存
2. 进程管理
进程管理的作⽤
(1)判断服务器健康状态
(2)查看系统中所有进程
(3)“杀死”进程
3.进程查看
ps -aux命令 和 ps -ef 命令
[root@Freedom ~]# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.4 171640 16060 ? Ss 20:00 0:02 /usr/lib/systemd/systemd rhgb --switched-root --system --deserialize 31
root 2 0.0 0.0 0 0 ? S 20:00 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< 20:00 0:00 [rcu_gp]
root 4 0.0 0.0 0 0 ? I< 20:00 0:00 [rcu_par_gp]
root 6 0.0 0.0 0 0 ? I< 20:00 0:00 [kworker/0:0H-events_highpri]
root 7 0.0 0.0 0 0 ? I 20:00 0:00 [kworker/0:1-events]
root 9 0.0 0.0 0 0 ? I< 20:00 0:00 [mm_percpu_wq]
root 10 0.0 0.0 0 0 ? S 20:00 0:00 [rcu_tasks_kthre]
root 11 0.0 0.0 0 0 ? S 20:00 0:00 [rcu_tasks_rude_]
root 12 0.0 0.0 0 0 ? S 20:00 0:00 [rcu_tasks_trace]
分析输出结果
①USER:该进程是由哪个⽤户产⽣的
②PID:进程的ID号
③%CPU:该进程占⽤CPU资源的百分⽐,占⽤越⾼,进程越耗费资源
④%MEM:该进程占⽤物理内存的百分⽐,占⽤越⾼,进程越耗费资源
⑤VSZ:该进程占⽤虚拟内存的⼤⼩,单位KB
⑥RSS:该进程占⽤实际物理内存的⼤⼩,单位KB
⑦TTY:该进程是在哪个终端中运⾏的。其中TTY1-TTY6代表本地控制台终端。TTY2-6是本地的字符界⾯终端,
TTY1是图形终端。PTS/0-255代表虚拟终端。如果是“?”,则表示该进程是由内核直接产⽣,⽽不是任何的终端产⽣。
⑧STAT:进程状态。常⻅的状态有R:运⾏、S:睡眠、T:停⽌、s:包含⼦进程、+:位于后台
⑨START:该进程的启动时间
⑩TIME:该进程占⽤CPU的运算时间,注意不是系统时间
⑪COMMAND:产⽣此进程的命令名
[root@rhel7-0 ~]# ps –le或 ps -ef
①-l表示显示更详细的信息
②-e表示显示所有的进程
top 命令 (动态的查看进程信息)
#动态查看系统进程
top 命令
[root@rhel7-0 ~]# top [选项]
-d表示秒数,指定top命令每隔⼏秒更新,默认是3秒
在top命令的交互模式当中可以执⾏的命令:
1.? 或h:显示交互模式的帮助
2.P:以CPU使⽤率排序,默认就是此项
3.M:以内存的使⽤率排序
4.N:以PID排序
5.q:退出top
top命令显示的信息详解
- 第⼀⾏是任务队列信息
21:07:34 : 系统当前时间
up 1:06 : 系统运行的时间,运行了多久
2 users:系统当前登录的用户数量
load average : 0.00 ,0.00 ,0.00 : 系统在之前1分钟,5分钟,15分钟的平 均负载值。⼀般认为⼩于1时负载较⼩。 如果⼤于1,系 统已经超出负荷
- 第⼆⾏是进程信息
Tasks: 316 total 系统中的进程总数
1 running : 运行的进程数
315 sleeping : 睡眠的进程数量
0 stopped : 停止的进程数量
0 zombie : 僵尸进程 (一般一两个僵尸进程是属于正常情况,不必过于担心)
- 第三⾏是 cpu 信息
0.1%us ⽤户模式占⽤的CPU百分⽐
0.1%sy 系统模式占⽤的CPU百分⽐
0.0%ni 改变过优先级的⽤户进程占⽤的CPU百分⽐
99.8%id 空闲CPU的CPU百分⽐
0.0%wa 等待输⼊/输出的进程的占⽤CPU百分⽐
0.0%hi 硬件中断请求服务占⽤的CPU百分⽐
0.0%si 软中断请求服务占⽤的CPU百分⽐
0.0%st st(steal time)虚拟时间百分⽐。就是当有虚拟机时,虚拟CPU等待时机CPU的时间 百分⽐
- 第四⾏是物理内存信息
3696.9 total 物理内存的总量,单位KB
1844 free 空闲的物理内存数量
1200.6经使⽤的物理内存数量
652.6 作为缓冲的内存数量
- 第五⾏是交换分区(swap)信息
2048 total 交换分区(虚拟内存)的总大小
2048 free 空闲交换分区的大小
0 used 已经使用的大小
avail 可用的大小
进程树(pstree)
[root@rhel7-0 ~]# pstree [选项]
-p表示显示进程的PID -p可以显示所有的⼦进程,并且显示PID
4.终止进程
kill 命令
参数-l,查看所有进程信号
常⽤信号说明
信号代号 | 信号名称 | 说明 |
---|---|---|
1 | SIGHUP | 该信号让进程⽴即关闭,然后重新读取配置⽂件之后重启 |
2 | SIGINT | 程序终⽌信号,⽤户终⽌前台进程。相当去输出ctrl+c快捷键 |
9 | SIGKILL | ⽤来⽴即结束程序的运⾏,本信号不能被阻塞、忽略。⼀般 ⽤于强制终⽌进程 |
15 | SIGTERM | 正在结束进程的信号,kill命令的默认信号。有时如果进程已 经发⽣问题,这个信号是⽆法正常终⽌进程的,我们这时才 会尝试SIGKILL信号,也就是信号9 |
18 | SIGCONT | 该信号可以让暂停的进程恢复执⾏,本信号不能被阻断 |
19 | SIGSTOP | 该信号可以暂停前台进程,相当于输⼊ctrl+z快捷键。本信号 不能被阻断 |
[root@circle ~]# kill -9 32425 # 强制终⽌PID为32425的进程
[root@circle ~]# kill -1 32411 # 重启PID为32411的进程
[root@circle ~]# kill -15 32452 #相当于 kill 32452,正常结束PID为32452的进程
killall 命令
使⽤killall命令终⽌进程
[root@circle ~]# killall [选项] [信号] 进程名 # 按照进程名杀死进程
①-i参数会询问是否要杀死某个进程
②-I参数会忽略进程名的⼤⼩写
killall用法
killall命令⽤法
[root@circle ~]# pstree -p | grep httpd
|-httpd(44902)-+-httpd(44903)
| |-httpd(44904)
| |-httpd(44905)
| |-httpd(44906)
| `-httpd(44907)
[root@circle ~]# killall -9 httpd
[root@circle ~]# pstree -p | grep httpd
pkill命令
⽤pkill命令终⽌进程
[root@circle ~]# pkill [选项] [信号] 进程名 # 按照进程名杀死进程
# -t + 终端号:按照终端号踢出⽤户
[root@circle ~]# pkill -t pts/1
[root@circle ~]# pkill -f httpd # -f 指定进程名字
建议服务还是使⽤正常的systemctl stop xxx.service 来停⽌服务,只有在正常停⽌不⽣效后才建议使⽤kill命令终⽌进程
作业调度(jobs)
后台进程:看不到的就是后台进程
前台进程:所能看到的就是前台进程
如何执行一个后台进程
例如 cat命令
cat & # 加上&,就可以让他运行在后台
jobs 就可以看到后台运行的任务
但,请注意,并不是所有的任务都可以运行在后台,cat就是一个
前后台任务的切换
当前台进程在运行时,按ctrl+z 切换到后台,但是他是stopped的,如果想让他继续运行,就需要kill -18 %1 继续运行
或者bg %1 也可以让他继续在后台运行
fg %1 让后台进程放在前台运行
服务管理
服务就是进程,进程不一定是服务
服务是具备一定功能的进程,有的进程并不具备服务的功能
Linux里的第一个进程,就是系统所有进程的父进程。
在rhel 6 之前,用的第一个Linux进程是init ,串行启动进程,速度慢
在rhel 7 之后,用的第一个Linux系统进程是systemd 并行启动进程,速度极快
systemd 管理服务操作
systemd 管理的内容不仅仅有service ,service只是当中的一个。它systemd管理的单位是unit
[root@Freedom ~]# systemctl status NetworkManager.service
[root@Freedom ~]# systemctl stop NetworkManager.service
[root@Freedom ~]# systemctl start NetworkManager.service
[root@Freedom ~]# systemctl restart NetworkManager.service
[root@Freedom ~]# systemctl enable NetworkManager.service # 开机自启动
[root@Freedom ~]# systemctl disable NetworkManager.service # 取消开机自启动
[root@Freedom ~]# systemctl is-active NetworkManager.service
active
[root@Freedom ~]# systemctl is-enabled NetworkManager.service #在脚本中很好用
enabled
target 管理
target 就是一个盒子,这个盒子里包含了众多的service而已。
按ctrl+alt+F1~F6 可快速切换到字符界面
[root@Freedom ~]# systemctl isolate graphical.target # 这个命令可以切换到图形界面
[root@Freedom ~]# systemctl isolate multi-user.target # 这个命令可以切换到字符界面