Linux&进程管理&ps/top/nice/renice/kill/jobs/bg/fg/信号

大多数人最早接触进程应该都是在windows系统下的任务管理器,其实在linux系统中,也有任务管理器的存在,当然,就也有进程的存在。

在这里插入图片描述这是一张Linux系统下的资源管理器的截屏,其中的Process Name告诉了我们,这里的每一行都是一个进程。

【什么是进程】
在这里插入图片描述百度是这样描述进程的,简单来说,进程就是程序正在运行状态,是程序的另一种表现形式

通常我们把进程的状态分为5种:
R【running】:正在运行的进程
S【sleeping】:休眠,可以被唤醒,通常为没有被使用的时候
T【traced or stoppd】:无法被唤醒,但是没有结束,可以通过命令唤醒
D【uninterruptible sleep】:不可被唤醒的睡眠状态,不响应信号,通常在等待I/O接口。
Z【zombie】:僵尸状态,已经结束,但是进程还在,占用系统资源

##我们通常说的唤醒类似于在电脑上看电影过程中,移动一下鼠标,播放暂停的选项栏就出来了。移动下鼠标的这个过程就叫做唤醒。


我们该如何调用查看进程:
\color{blue}{在命令行查看进程:}

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显示结果就不一一列举了,有兴趣的朋友可以自行实验。


t o p \color{blue}{top进程监控:}

top ###进程的动态监控

top :进程动态监控

1 ###显示cpu每个核的负载【查看cpu】
s ###调整刷新频率【按s后再按1 ##每一秒刷新一次】
c ###cpu负载排序
m ###内存使用量排序
h ###查看帮助
u ###查看指定用户进程
k ###对指定进程发起信号
q ###退出

在这里插入图片描述在这里插入图片描述


n i c e \color{blue}{优先级nice:}

首先我们用ps指令来查看进程:

在这里插入图片描述
这里的NI就是nice的简写,即优先级。
优先级范围nice【NI】: -20~19

上面图片我们查看的是当前shell中运行的进程的nice优先级。
如果我们要查看系统所有程序的优先级的话,可以【ps ax -o pid,niec,comm

在这里插入图片描述
进程的优先级关乎着该程序的资源调配顺序,当系统是默认给优先级高的进程调配资源的。所以当我们想要优先某个进程时,就需要给它更高的优先级。即设定进程优先级。

r e n i c e n i c e \color{blue}{【renice和nice】}

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的优先级最低。


k i l l \color{blue}{结束进程的kill和信号:}
我们已经了解了进程的绝大多数内容,那么如何才能用命令结束进程呢?
这里需要我们再知道一些信号的内容。

想想我们在日常生活中也有很多信号,比如常见的红绿灯信号。所以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指令结束某一进程。比较常用:

在这里插入图片描述


j o b s / b g / f g \color{blue}{前台、后台jobs/bg/fg:}

前台程序会占用着终端,我们同时打开多个程序时,一些程序就会转到后台去运行。

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。

在这里插入图片描述


                    大大的小小阳

猜你喜欢

转载自blog.csdn.net/dddxxy/article/details/89133770