大多数人最早接触进程应该都是在windows系统下的任务管理器,其实在linux系统中,也有任务管理器的存在,当然,就也有进程的存在。
这是一张Linux系统下的资源管理器的截屏,其中的Process Name告诉了我们,这里的每一行都是一个进程。
【什么是进程】
百度是这样描述进程的,简单来说,进程就是程序正在运行的状态,是程序的另一种表现形式。
通常我们把进程的状态分为5种:
R【running】:正在运行的进程
S【sleeping】:休眠,可以被唤醒,通常为没有被使用的时候
T【traced or stoppd】:无法被唤醒,但是没有结束,可以通过命令唤醒
D【uninterruptible sleep】:不可被唤醒的睡眠状态,不响应信号,通常在等待I/O接口。
Z【zombie】:僵尸状态,已经结束,但是进程还在,占用系统资源
##我们通常说的唤醒类似于在电脑上看电影过程中,移动一下鼠标,播放暂停的选项栏就出来了。移动下鼠标的这个过程就叫做唤醒。
我们该如何调用查看进程:
gnome-system-monitor ##图形方式查看【打开进程管理器】
【ps系列进程查看指令】
ps ###显示当前shell里运行的程序产生的进程
ps a ###所有shell中产生的进程【包括运行环境的进程】
ps -a ###所有shell中运行的进程【不包括运行环境的进程】
ps -A ###系统中所有运行的进程【包括环境进程】
ps -d ###系统中所有运行的进程【不包括运行环境的进程】
ps e ###显示进程的扩展信息【比如占用资源】
ps -e ###和ps -A相似
ps -x ###显示所有输出设备的进程
ps -u ###显示进程的用户列表【包括user/pid/cpu/...】
ps f ###显示进程的从属关系 ###【父级进程结束,子进程不一定会结束】【父级进程结束,子进程变为孤儿进程,由系统初始化程序管理】
ps aux ###显示系统所有进程并显示进程用户
ps ef ###显示进程详细信息并显示父子关系
ps ax ###显示当前系统中的所有进程
pstree ###以树型显示系统进程的顺序
-----------------------------------------------------------------------------------------------------
【ps -o xxx ###显示进程的指定信息】
ps -o pid ###显示进程的pid 【进程id】
ps -o comm ###显示进程名称
ps -o user ###显示所有人
ps -o group ###显示所有组
ps -o %cpu ###显示进程cpu使用率
ps -o %mem ###进程内存的使用率
ps -o nice ###优先级
ps -o pid,comm ###显示进程的pid,进程名称
ps -o pid,comm,%cpu,%mem,nice,stat,user,group ###显示进程的pid,进程名称,cpu占用情况,内存使用情况,优先级,状态,所有者,所在组
ps --sort= ##【进程排序】【例:ps --sort=%cpu -o %cpu】【以cpu占用情况排序,并显示cpu占用情况】【ps --sort=%pid -o %mem,%cpu,commcpid,user,group,stat】【以pid的大小进行排序,显示-o后面的参数】
题:查看以pid排序的前5名进程。 【ps -A --sort=pid -o pid |head -n 6 | tail -n 5
】【第一行显示的是pid(这一列的种类),所以要查看后5行】
其他ps显示结果就不一一列举了,有兴趣的朋友可以自行实验。
top ###进程的动态监控
top :进程动态监控
1 ###显示cpu每个核的负载【查看cpu】
s ###调整刷新频率【按s后再按1 ##每一秒刷新一次】
c ###cpu负载排序
m ###内存使用量排序
h ###查看帮助
u ###查看指定用户进程
k ###对指定进程发起信号
q ###退出
首先我们用ps指令来查看进程:
这里的NI就是nice的简写,即优先级。
优先级范围nice【NI】: -20~19
上面图片我们查看的是当前shell中运行的进程的nice优先级。
如果我们要查看系统所有程序的优先级的话,可以【ps ax -o pid,niec,comm
】
进程的优先级关乎着该程序的资源调配顺序,当系统是默认给优先级高的进程调配资源的。所以当我们想要优先某个进程时,就需要给它更高的优先级。即设定进程优先级。
renice -n 10 31395 ###renice -n 优先级 pid ###调整已经开启的进程的优先级
nice -n -5 firefox ###指定开启一个优先级为-5 的firefox
nice -n 5 filefox & ###在后台打开一个优先级为5的firefox
1.在后台打开一个优先级为5的firefox
2.更改firefox的优先级为2。这里我们更改时用的是firefox的pid,在上一张图片中有告诉我们。更改完后我们用ps指令再加以查看。
最后,说明一下,进程的优先级是数值越小进程优先级越大。即-20是最优先的,19的优先级最低。
我们已经了解了进程的绝大多数内容,那么如何才能用命令结束进程呢?
这里需要我们再知道一些信号的内容。
想想我们在日常生活中也有很多信号,比如常见的红绿灯信号。所以linux中的信号也是类似的。它无非是想提供一个机制在需要的时候告诉某个进程该怎样做。是一种规定,便于系统操作。就像我们都知道”红灯停,绿灯行“一样。
man 7 signal 查看信号详细信息
其中第二张截屏中,kill,即为我们需要的结束进程指令。
先列举一些常用的关于进程的信号等级:
1 ##进程重新加载配置 【在进程不关闭的情况下】【有些程序不支持reload,重新加载会关闭】
2 ##删除进程在内存中的数据 【在一个shell里编辑字,在另一个shell里运行指令,清除了第一个shell中的内容】
3 ##删除鼠标在内存中的数据 【让鼠标消失】
9 ##强行结束单个进程(不能被阻塞) 【可能会造成问题】
15 ##正常关闭进程(可能会被阻塞)
18 ##运行暂停的进程
19 ##暂停某个进程(不能被阻塞)
20 ##把进程打入后台(可以被阻塞)
kill指令:
kill -信号 进程pid
killall -信号 进程名字 ###【批量结束】
pkill -信号 -u student ###【条件处理】【对某一用户(student)的所有进程进行处理】
pkill -9 -u student ###【条件处理(强制结束结束)】
pkill -9 -P 父级进程 ###结束父级进程下的所有子进程
这里我们简单演示下用kill指令结束某一进程。比较常用:
前台程序会占用着终端,我们同时打开多个程序时,一些程序就会转到后台去运行。
ctrl + z ###将前台程序打入后台挂起【前台程序:正在占用终端的程序】
jobs ###查看后台程序
bg jobnum ###bg 【job号】 运行后台程序
fg 1 ###fg 【job号】将后台程序调回前台
firefox & ###在后台运行firefox
#jobs中 “+”代表下一个被调用;“-”等待下一个被调用。
#fg ###默认会调用有“+”的程序;“+”被调走后,“-”变为“+”
firefox & ###直接在后台打开firefox 【vim不能在后台运行起来,因为需要图形界面】
我们进行演示:
1.直接在前台用指令打开firefox
2.发现我们无法输入其他命令了,shell被占用。
3.ctrl + z将前台程序打入后台,发现shell又可以使用。
4.输入jobs,我们可以查看后台程序。
5.fg将后台firefox调回前台,发现shell又无法使用
最后简单说一下bg:
当后台程序不在运行状态时,我们将其运行。即将下图中的不是running改为running。
大大的小小阳