RHCE第四周 进程管理
1:进程的概念
2:linux监控
3:信号管理
4:进程优先级
5:job任务
进程:就是正在运行的程序叫做进程
进程的权限来源于用户的权限,继承用户的权限;哪个用户运行,那么进程就继承哪个用户的uid和gid
查看进程的2种方式
一:ps(静态的查看进程)
就是在一瞬间的时候,查看进程
1:ps 的选项
| -a | 显示所有终端下的进程 |
| -x | 显示所有进程(不以终端来区分)内核程序 |
| -u | 显示用户的进程 |
| -e | 显示所有的进程 |
| -f | 显示父进程 |
| -o | 自定义的显示 |
| -p | 指定查看的pid |
2:ps命令详细介绍
1:输出的名词的解释
[root@server /]# ps -aux | head USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.4 171796 15940 ? Ss 05:51 0:01 /usr/lib/systemd/systemd rhgb --switched-root --system --deserialize 31 root 2 0.0 0.0 0 0 ? S 05:51 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? I< 05:51 0:00 [rcu_gp] root 4 0.0 0.0 0 0 ? I< 05:51 0:00 [rcu_par_gp]
user:就是这些进程是由哪些用户创建的
pid:就是每个进程都会被系统分配一个pid,进程结束后,pid就会被释放出来,给下一个进程使用
%cpu:就是进程占用了多少cpu
%mem:就是进程占用了多少的内存
tty:就是得到终端的方式,有三种,tty;pts;?
stat:就是进程的状态, 四种,正在运行的,停止的,睡眠的,僵尸的
time:就是这个进程持续的时间
command:就是这个进程的命令
2:tty的解释
有三种获得终端的方法
tty和pts都是linux的终端设备
tty:与计算机连接,有串口这些东西,与计算机的输入和输出有关系的设备,键盘或者显示器,tty2表示该进程正在tty2上运行,它是一个物理控制台,用于与用户进程交互的,每一个物理控制台都有一个关联的tty设备,在命令行模式下,直接与控制台进行交互,就是与电脑直连的,ctrl+alt+Fn就是的,有tty3和tty4
pts:就是伪终端,图形化和远程连接这种方式的,pts/0就是第一个终端,2就是第二个终端
?:表示没有终端,是内核的进程
3:stat的解释
这个是进程的状态,
孤儿进程:就是子进程在运行,但是父进程退出了,这个时候,守护进程就会接管,来关闭这个孤儿进程
僵尸进程:这个就是父进程对于子进程的发的消息没有回应,此时,子进程就会一直占用cpu的资源
3:PS列子
1)一般与grep配合使用查找pid
[root@server /]# vim a & [1] 9941 [root@server /]# jobs [1]+ 已停止 vim a [root@server /]# ps -aux | grep vim root 9941 0.0 0.2 229528 9200 pts/0 T 10:43 0:00 vim a root 9952 0.0 0.0 221684 2288 pts/0 S+ 10:44 0:00 grep --color=auto vim [root@server /]#
2)ps -ef === ps -aux
[root@server /]# ps -aux | wc -l 305 [root@server /]# ps -ef | wc -l 305 [root@server /]#
3)-o这个选项,自定义显示内容
只显示user,%mem,%cpu,command
[root@server /]# ps -axo user,%cpu,%mem,command |head -5 USER %CPU %MEM COMMAND root 0.0 0.4 /usr/lib/systemd/systemd rhgb --switched-root --system --deserialize 31 root 0.0 0.0 [kthreadd] root 0.0 0.0 [rcu_gp] root 0.0 0.0 [rcu_par_gp] [root@server /]#
4)按照内存和cpu来排序 --sort
不带上减号,默认是升序,反之,就是降序
[root@server /]# ps -aux --sort=%cpu | tail -5 root 10166 0.0 0.1 233896 6812 pts/1 R+ 10:53 0:00 ps -aux --sort=%cpu root 10167 0.0 0.0 221308 1044 pts/1 S+ 10:53 0:00 tail -5 root 8240 0.1 0.2 240316 10088 ? Ss 09:18 0:06 /usr/libexec/sssd/sssd_kcm --uid 0 --gid 0 --logger=files root 8432 0.3 2.6 1027100 103964 ? Ssl 09:31 0:15 /usr/libexec/gnome-terminal-server root 1603 2.0 12.4 4227512 496640 ? Ssl 05:52 6:06 /usr/bin/gnome-shell [root@server /]# #带上减号的 [root@server /]# ps -aux --sort=-%cpu | head -5 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1603 2.0 12.4 4227512 496588 ? Ssl 05:52 6:06 /usr/bin/gnome-shell root 8432 0.3 2.6 1027100 103964 ? Ssl 09:31 0:15 /usr/libexec/gnome-terminal-server root 8240 0.1 0.2 240316 10088 ? Ss 09:18 0:06 /usr/libexec/sssd/sssd_kcm --uid 0 --gid 0 --logger=files root 1 0.0 0.4 173148 17368 ? Ss 05:51 0:02 /usr/lib/systemd/systemd rhgb --switched-root --system --deserialize 31 [root@server /]#
5)显示父进程
[root@server /]# ps -ef| head -5 UID PID PPID C STIME TTY TIME CMD root 1 0 0 05:51 ? 00:00:02 /usr/lib/systemd/systemd rhgb --switched-root --system --deserialize 31 root 2 0 0 05:51 ? 00:00:00 [kthreadd] root 3 2 0 05:51 ? 00:00:00 [rcu_gp] root 4 2 0 05:51 ? 00:00:00 [rcu_par_gp] [root@server /]#
二:top命令(动态的查看进程)
1:top命令选项
| -d | 就是实时刷新的速度 |
| -p | 指定监控进程pid |
| -st | cpu等待时间的百分比 |
2:top命令详细介绍
1)top命令输出结果介绍
top - 14:50:56 up 15 min, 2 users, load average: 0.10, 0.08, 0.05
Tasks: 289 total, 1 running, 288 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 3888.9 total, 2318.1 free, 1017.1 used, 553.6 buff/cache
MiB Swap: 4096.0 total, 4096.0 free, 0.0 used. 2629.0 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 171756 16048 10492 S 0.0 0.4 0:01.32 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
每个字段的介绍
top:开机时间,多少个用户在登录这个系统,当前系统负载均衡值,每分钟,每5分钟,每15分钟,一般超过了1就超载运行,等于1全力在运行,小于1,很空闲
tasks:289个进程 有一个正在运行;288个在休眠中,0个停止,0个僵尸
%cpu:占用的cpu率。us---为用户占用 sy----系统内核占用 ni----改变过系统优先级占用 id----为空闲的,一般这个数字越大,就是没有占用多少cpu, wa:就是等待i|o操作完成占用的cpu
mem:这个是总内存,还有多少空余的内存,已经使用了多少内存,缓存量
swap:这个交换分区的大小,多少空闲,多少已经被使用了,可用的物理内存剩余多少
2)关于缓存的介绍
就是电脑要读取一个图片的话,一般不会从磁盘中读取,都是直接在缓存中读取的,因为磁盘的读取速度太慢了,所以有的就存放在缓存中,缓存就是提高了cpu的速度
写入磁盘的话,就是cpu现将数据写到缓冲区中,然后在写入到硬盘中去,如果一味的等待着写入磁盘的话,cpu的利用率就很低,所以一般写入在缓冲区中
3:top命令在执行的过程中使用的交互命令
按 "1"可以监控每个cpu的状态
c:就是显示完整的命令
M:就是按内存占用情况进行排序(降序)
P:就是按照cpu的占用情况进行排序(降序)
T:按照时间来进行排序
f:可以自定义显示哪些内容(按空格就是取消哪些不需要展示的内容)
k:可以杀死进程,要选中进程,然后回车,就能删除进程(发送15的信号)
三:pgrep查看进程
1:pgrep详细介绍
pgrep就是通过程序的名字来查询进程的工具,输出的是进程的pid
选项:
| -U | 就是查找用户的进程id |
| -G | 查找某个组的进程id |
| -P | 根据父进程id,查找出所有的子进程id |
| -l | 不仅打印pid,也打印进程名 |
| -o | 表示如果有多个进程同时在运行的话,找最开始启动的 |
| -n | 找最后启动的进程 |
| -d | 定义多个进程之间用分隔符,如果没有,默认换行符 |
| -c | 统计匹配到进程的数量 |
2:pgrep案例
1)显示以httpd进程的pid以;作为分割
[root@server /]# pgrep -d: httpd 2632:2633:2634:2635:2636 [root@server /]#
2):查找出最开始打开文件的pid和最后打开文件的pid
[root@server /]# vim a & [1] 2916 [root@server /]# vim b & [2] 2917 [1]+ 已停止 vim a [root@server /]# #最开始编辑的的文件 [root@server /]# pgrep -o vim -l 2916 vim #最后开始编辑的文件 [root@server /]# pgrep -n vim -l 2917 vim
3):查找用户的进程pid
[root@server /]# pgrep -U root|head -10 1 2 3 4 6 9
4)统计httpd进程的数量
[root@server /]# pgrep -c httpd 5
四:pidof查看进程(精确的查询)
它是根据进程名来查询pid的
[root@server /]# pidof httpd 2636 2635 2634 2633 2632
能够迅速的查找到进程的pid
应用:
查看httpd进程的详细信息
[root@server /]# ps -p $(pidof httpd)
PID TTY STAT TIME COMMAND
2632 ? Ss 0:00 /usr/sbin/httpd -DFOREGROUND
2633 ? S 0:00 /usr/sbin/httpd -DFOREGROUND
2634 ? Sl 0:00 /usr/sbin/httpd -DFOREGROUND
2635 ? Sl 0:00 /usr/sbin/httpd -DFOREGROUND
2636 ? Sl 0:00 /usr/sbin/httpd -DFOREGROUND
[root@server /]#
五:进程之间的通信
进程之间的通信靠的是管道和信号,消息队列,socket套接字等
1:kill命令
它是一个发送信号的工具
选项:
| -l | 列出信号 |
| -15 | 关闭进程 |
| -9 | 强制关闭 |
| -1 | 重新加载配置文件 |
案例:
#强制的杀死 [root@server /]# pgrep vim 2976 [root@server /]# kill -9 2976 [root@server /]# pgrep vim [root@server /]# #正常的关闭 [root@server /]# pgrep vim 2985 [root@server /]# kill -15 2985 [root@server /]# pgrep vim [root@server /]#
2:killall命令(通过名称(进程的名字)来杀死)
killall命令删除通过名称来删除
[root@server /]# pgrep vim 3001 [root@server /]# killall -9 vim [root@server /]# pgrep vim [root@server /]#
杀死httpd进程(所有的)
杀死这一类的所有进程
[root@server /]# pgrep -d: httpd 3021:3022:3023:3024:3025 [root@server /]# killall -9 httpd [root@server /]# pgrep -d: httpd [root@server /]#
3:pkill命令
也是杀死进程的命令,根据模式来发送信号
选项:
| -signal | 通过信号来杀死进程 |
| -u user command | 结束这个用户这个命令的所有进程 |
| -9 | 强制结束进程 |
| -t |
结束这个终端的所有进程(这个终端是怎么获得的) |
| -9 -t | 就是将一个用户退出终端 |
| -e | 精确匹配进程的名字(完整匹配) |
案列:
#结束一个终端的进程
[root@server ~]# pkill -t tty2
#强制删除vim进程
[root@server /]# pgrep vim
6425
[root@server /]# pkill -9 vim
[root@server /]# pgrep vim
#结束一个用户的所有进程
[root@server /]# pgrep -u q7 #前面是q7的终端的pid,后面的才是vim的pid
6447
6480
[root@server /]# pgrep vim
6480
[root@server /]# ps -aux|grep 6447
q7 6447 0.0 0.1 224220 5844 pts/3 S 16:19 0:00 -bash
root 6489 0.0 0.0 221684 2380 pts/0 S+ 16:20 0:00 grep --color=auto 6447
[root@server /]# pkill -u q7
[root@server /]# pgrep vim
[root@server /]#
#强制的退出一个用户
[root@server /]# ps -a
PID TTY TIME CMD
5515 tty2 00:00:00 gnome-session-b
6526 pts/3 00:00:00 ps
[root@server /]#
[root@server /]# pkill -9 -t pts/3
Connection closing...Socket close.
Connection closed by foreign host.
Disconnected from remote host(192.168.20.10:22) at 21:23:02.
Type `help' to learn how to use Xshell prompt.
[D:\~]$
就成功的删除了这个用户的登录的终端,让他强制的退出了
关于踢走一个用户命令
因为用户登录时,是有一个终端的进程,只要把那个终端的进程干掉就可以了
pkill 这个命令强制退出这个终端 #[root@server ~]# pkill -9 -t pts/0 kill 这个命令也行,只要找到这个进程的pid就可以了 kill -9 用户名id killall这个命令也行 ps -au找到哪个用户登录了 killall -9 -u 用户名
三种杀死进程的比较:
1:kill这个命令是通过这个pid来杀死进程的
2:killall这个命令是通过这个进程的名字来杀死进程的
3:pkill更加的精确,可以根据进程的名字,来杀死,也可以踢走一个用户的终端
相同点:都可以使用信号-9之类的
六:进程的优先级
就是在系统繁忙的时候,调整优先级,优先执行那个进程,决定着对cpu的访问
进程的优先级有2个,pr;ni
1:优先级的大小
默认是-20--19的
优先级最高的是-20,最低的是19,成反比
2:查看优先级
ps -o ni,command
[root@server /]# ps -o ni,command | head -10 NI COMMAND 0 -bash 0 ps -o ni,command 0 head -10
top,按住f这个选项,就能看的到
1 root 20 0 systemd
2 root 20 0 kthreadd
3 root 0 -20 rcu_gp
4 root 0 -20 rcu_par_gp
6 root 0 -20 kworker/0:0H-events_highpri
9 root 0 -20 mm_percpu_wq
10 root 20 0 rcu_tasks_kthre
11 root 20 0 rcu_tasks_rude_
3:更改优先级(只有root用户能够修改优先级)
2种方式的更改
1:在启动进程之前修改
格式:nice -n 5 command
[root@server ~]# nice -n 5 vim a & [1] 6583 [root@server ~]# ps -axo ni,command | grep vim 5 vim a 0 grep --color=auto vim [root@server ~]#
这样就能修改启动前的进程的优先级
2:在启动进程之后修改
格式:renice 5 pid
[root@server ~]# ps -axo ni,command | grep vim 5 vim a 0 grep --color=auto vim [root@server ~]# pgrep vim 6583 [root@server ~]# renice 10 6583 6583 (process ID) 旧优先级为 5,新优先级为 10 [root@server ~]# #这样就修改成功了
七:作业控制
就是一些在后台运行的进程
案列:
jobs命令,就是查看当前终端的所有后台进程
1)将一个进程放在后台(&)
[root@server ~]# vim a & [2] 6600 [root@server ~]# jobs [1]- 已停止 nice -n 5 vim a [2]+ 已停止 vim a
2)将一个正在运行的进程暂停(放入到后台)
[root@server /]# vim a [1]+ 已停止 vim a [root@server /]#
3)将暂停的程序放在后台运行(bg)
[root@server /]# jobs [1]+ 已停止 vim a [root@server /]# bg 1 [1]+ vim a &
4)将暂停的程序放在前台运行(fg)
[root@server /]# jobs [1]+ 已停止 vim a [root@server /]# fg 1 vim a [root@server /]# jobs [root@server /]#
5)杀死后台进程
[root@server /]# vim & [1] 6637 [root@server /]# jobs [1]+ 已停止 vim [root@server /]# kill -9 %1 [1]+ 已停止 vim [root@server /]# jobs [1]+ 已杀死 vim [root@server /]#
总结:就是查看进程的命令有ps,top,pgrep,pidof
发送信号的命令 kill ,killall,pkill
修改优先级的nice,renice
作业控制:bg,fg,& ctrl+z

浙公网安备 33010602011771号