Linux进程管理
-
什么是程序:应用程序是用户选择安装的程序的总称,通常包括驱动程序的进程,看图软件、解压缩软件等通用软件的进程.也可以顾名思义地说:应用程序就是为使用者提供与电脑沟通所开发出来的程序软件
-
什么是进程:
狭义定义:进程就是一段程序的执行过程。
广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。
-
什么是线程:也叫做轻量级进程,线程是进程中的⼀个执⾏单元,负责当前进程中程序的执⾏,⼀个进程中⾄少有⼀个线程。⼀个进程中是可以有多个线程的,这个应⽤程序也可以称之为多线程程序。
【1】、查看进程树
-
pstree:以树状结构显示进程信息,包括进程之间的关系
-
option
-
-p:显示进程PID
-
-a:显示完整的命令行
-
-u:列出每个进程所属账号名称
可以查看每一个进程是由哪些账号开启的,进程要一直开启才可以看到,进程有生命周期
-
通过pstree命令可以去进行进程的查询。
可以通过用户查询
pstree -p 用户名
-
ps aux :unix格式静态查看系统进程,查看系统所有进程信息
-
a:显示当前终端所有进程
-
u:以用户格式输出
-
x:当前用户在所有终端下的进程
sh[root@bogon ~]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.1 0.3 241428 14348 ? Ss 04:21 0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 17
-
各个字段的含义
shUSER:进程属于哪个用户 PID:进程ID号 %CPU:该进程占用CPU的百分比 %MEN:该进程占用物理内存的百分比 VSZ:进程使用掉的虚拟内存量(单位:kb) TTY:表示进程在那个终端运行,如果内核直接调用则显示"?",tty1-tty6表示本机终端登录的用户进程,pts/0-255则表示远程终端登录用户的进程 STAT:进程状态,R(running)运行,S(sleep)睡眠,s包含子进程,T(stop)停止,Z(zombie)僵尸进程, +后台进程 START:进程启动时间 TIME:占用CPU运算时间 COMMAND:产生此进程的命令
-
-
ps ef :unix格式静态查看系统进程,查看系统所有进程信息
-
-e:显示当前终端所有进程
-
-f:显示最完整的进程信息
-
-l:以长格式输出
-
查找僵尸进程
sh[root@bogon ~]# ps -e -o ppid,stat | grep Z
-
【2】、top命令
sh
Tasks: 256 total, 1 running, 255 sleeping, 0 stopped, 0 zombie
进程总数 正在运行的进程 休眠进程数 停止进程数 僵尸进程数
第一行:
系统本地时间
系统运行时间
用几个用户在登录
负载情况
- -M:按照内存使用资源排序
- -P:按照CPU使用资源排序
【3】、进程的前后台调度
-
前台任务
会持续占据终端界面,直至任务的结束才会释放终端界面,在前台任务占据终端界面时,我们是不能进行任何操作的
-
后台任务
在后台运行的任务不会占据控制界面,我们可以执行其他的命令
-
&:将程序fangruhoutaiyunx
-
jobs -l:查看后台任务列表
-
fg 进程编号:将后台任务恢复到前台执行
-
CTRL+Z:挂起前台任务并且放入后台
-
bg 进程编号:激活后台被挂起的进程
sh
[root@bogon ~]# ping baidu.com >> /dev/null &
[1] 3230
#将进程放入后台执行
[root@bogon ~]# jobs -l
[1]+ 3230 Running ping baidu.com >> /dev/null &
#查看后台进程
[root@bogon ~]# fg 1
ping baidu.com >> /dev/null
#将后台进程放入前台执行
^Z
#挂起前台任务,并放入后台
[1]+ Stopped ping baidu.com >> /dev/null
[root@bogon ~]# bg 1
#激活
[1]+ ping baidu.com >> /dev/null &
[root@bogon ~]# jobs -l
[1]+ 3230 Running ping baidu.com >> /dev/null &
【4】、杀死进程
-
CTRL+C:结束当前命令程序,只能杀死前台任务,后台任务没法杀
-
kill
-
按照PID杀死,精确的杀死一个进程
-
-l:列出可选择的信号
-
常用信号:
-1:重启
-9:强制杀死,直接杀死,例如杀死僵尸进程
-15:正常杀死,默认是-15,杀死进程时先终止,后杀死
sh[root@bogon logs]# jobs -l [1] 3628 Running sleep 2m & [2]- 3629 Running sleep 3m & [3]+ 3630 Running sleep 4m & [root@bogon logs]# kill 3628 [root@bogon logs]# jobs -l [1] 3628 Terminated sleep 2m [2]- 3629 Running sleep 3m & [3]+ 3630 Running sleep 4m & [root@bogon logs]# jobs -l [2]- 3629 Running sleep 3m & [3]+ 3630 Running sleep 4m & [root@bogon logs]# jobs -l [2]- 3629 Running sleep 3m & [3]+ 3630 Running sleep 4m & [root@bogon logs]# kill -9 3630 [root@bogon logs]# jobs -l [2]- 3629 Running sleep 3m & [3]+ 3630 Killed sleep 4m [root@bogon logs]# jobs -l [2]+ 3629 Running sleep 3m &
-
-
killall
-
依据进程名杀死进程
-
killall 进程名
sh[root@bogon logs]# jobs -l [1] 3673 Running sleep 5m & [2]- 3674 Running sleep 6m & [3]+ 3675 Running sleep 7m & [root@bogon logs]# killall sleep [1] Terminated sleep 5m [2]- Terminated sleep 6m [3]+ Terminated sleep 7m [root@bogon logs]# jobs -l
-
强制杀死某用户所有的进程
shkillall -9 -u 用户名
-
-
pkill
- 按照终端杀死进程,-t
【5】、nice值
- 每一个进程都会拥有一个"优先级(priority)"属性
- 通过改变nice值,修改进程优先级
- nice值的范围是-20~19,nice值越低优先级越高,nice默认值是0、
- nice:在创建进程时设置nice值
- renice:创建好进程后,重新设置nice值
sh
[kiosk@foundation0 ~]$ ps efo pid,command,nice
PID COMMAND NI
5890 bash SYSTEMD_EXEC_PID=2335 0
3058 bash SYSTEMD_EXEC_PID=2335 0
8949 \_ ps efo pid,command,nice 0
2245 /usr/libexec/gdm-wayland-se 0
2254 \_ /usr/libexec/gnome-sess 0
# 普通用户对于nice值只能调高(优先级只能调低),root用户对于nice值既可以调高,也可以调低
[root@servera ~]# nice -n 19 ping 127.0.0.1 > /dev/null &
[root@servera ~]# ps efo pid,command,nice
PID COMMAND NI
1519 sudo -i SHELL=/bin/bash HIS 0
1523 \_ -bash HISTSIZE=1000 HOS 0
1545 \_ ping 127.0.0.1 SHEL 19
1546 \_ ps efo pid,command, 0
1078 /sbin/agetty -o -p -- \u -- 0
1065 /sbin/agetty -o -p -- \u -- 0
[root@servera ~]# renice -n 10 1545
1545 (process ID) old priority 19, new priority 10
[root@servera ~]# ps efo pid,command,nice
PID COMMAND NI
1519 sudo -i SHELL=/bin/bash HIS 0
1523 \_ -bash HISTSIZE=1000 HOS 0
1545 \_ ping 127.0.0.1 SHEL 10
1548 \_ ps efo pid,command, 0
1078 /sbin/agetty -o -p -- \u -- 0
1065 /sbin/agetty -o -p -- \u -- 0
# 普通用户不允许调低nice值,也就是不允许将进程的优先级调高
[student@servera ~]$ ping 127.0.0.1 > /dev/null &
[1] 1577
[student@servera ~]$
[student@servera ~]$
[student@servera ~]$ ps efo pid,command,nice
PID COMMAND NI
1501 -bash USER=student LOGNAME= 0
1577 \_ ping 127.0.0.1 SHELL=/b 0
1578 \_ ps efo pid,command,nice 0
[student@servera ~]$ renice -n 14 1577
1577 (process ID) old priority 0, new priority 14
[student@servera ~]$ ps efo pid,command,nice
PID COMMAND NI
1501 -bash USER=student LOGNAME= 0
1577 \_ ping 127.0.0.1 SHELL=/b 14
1581 \_ ps efo pid,command,nice 0
[student@servera ~]$ renice -n 8 1577
renice: failed to set priority for 1577 (process ID): Permission denied