引言
本文为第五篇,Linux的进程管理,本文主要介绍Linux进程的相关概念、操作Linux进程的相关命令等。
一、Linux进程的相关概念
1、进程的类型
(1)前台进程
前台进程就是具有终端,可以和用户进行交互的进程
下边写了一个死循环计算圆周率的程序
然后将程序跑起来,虽然程序没有输入任何东西,它却占了整个终端shell,此时输入任何命令都是没有用的,这个进程就是一个前台进程
现在改一下刚才的代码,让它不断的打印hello world
此时运行代码,它会死循环的输出hello world,这个就是一个有输出的前台进程,这个有输出的前台进程输出的内容占满了整个终端shell,即使输入任何的命令都是不管用的,因为这个前台进程占用了终端shell
(2)后台进程
- 与前台进程相对,没有占用终端的就是后台进程
- 后台进程基本上不和用户进行交互,优先级比前台进程低(因为前台进程要与用户进行交互,因此必须在响应速度或者在别的地方要跟得上,使得与用户交互时更加顺畅)
- 后台进程我们一般是使用&符号结束,这样就可以启动一个后台进程
举例:
现在将前边的代码改一下,让它每5秒输出一个hello world,然后以后台进程的方式让它跑起来
此时可以看见,我们以后台进程的方式将它跑起来的时候,它会输出一个进程ID,而且,这个后台进程是不占用shell的,虽然它的内容会打印到终端上,但是我们还是可以正常的使用命令的,同时,我们如果使用Ctrl+C,也是不会将这个后台进程停止的。
(3)守护进程
- 守护进程(daemon)是特殊的后台进程
- 很多守护进程在系统引导的时候启动,一直运行,直到系统关闭
- Linux有很多典型的守护进程
比如crond,这个就是Linux中定时任务守护进程、httpd是Linux中http服务的守护进程、sshd是平时我们使用ssh登录时候的守护进程、mysqld是数据库的守护进程(进程名字以d结尾的一般都是守护进程)
2、进程的标记
(1)进程ID
- 进程的ID是进程的唯一标记,每个进程拥有不同的ID
- 进程ID表现为一个非负的整数,最大值由操作系统限定
- 我们使用top命令就可以查看Linux中的所有进程,最左侧的PID列就是进程的ID
操作系统提供了fork()函数来创建进程,所以就可能出现下边这种情况
上边就是进程的层级关系,这中层级关系称之为父子进程关系。进程A通过fork函数创建了进程B,因此进程A是进程B的父进程。进程的父子关系,可以通过pstree命令查看
介绍几个特殊的进程
ID为0的进程为idle进程,是系统创建的第一个进程
ID为1的进程为init进程,是0号进程的子进程,负责完成系统的初始化(init进程是所有用户进程的祖先进程)
(2)进程的状态标记
在Linux中,可以使用man ps命令来了解各种进程状态的标记,这里只挑几个比较重要的进行介绍
现在将刚才上边写的死循环计算圆周率的代码以后台进程的方式跑起来,并且将一个死循sleep的代码也以后台进程的方式跑起来,然后看一下这两个进程的状态标记
此时两个进程分别处于运行状态和睡眠状态
二、操作Linux进程的相关命令
ps命令(主要是用来查看进程)
top命令(主要是查看Linux进程的使用内存或者是一些别的状态)
kill命令(主要是用来给进程发送信号的)
1、ps命令
(1)列出当前进程:ps
(2)查看进程详细信息:ps -aux
(3)查看指定用户进程:ps -u username
查看所有root用户的进程:ps -u root
(4)查看指定进程:ps -aux|grep 指定进程信息
(5)查看进程树(查看进程的父子关系):ps -ef --forest
(6)将进程按使用cpu的频率来进行排序:ps -aux --sort=pcpu
(7)将进程按使用内存的大小来进行排序:ps -aux --sort=pmem
2、top命令
(1)查看所有进程的状态:top
(PR是进程的优先级、VIRT是进程的虚拟内存、TIME+是进程运行的时间、COMMAND是进程的命令)
3、kill命令
(1)给指定进程发信号:kill -信号 进程ID
给指定进程ID发送9这个信号:kill -9 23
9这个信号表示无条件的终止这个进程,更多的信号,可以使用kill -l进程查看
在快速变化的技术中寻找不变,才是一个技术人的核心竞争力。知行合一,理论结合实践
站在了巨人的肩膀上学习,向前辈致敬
参考:https://coding.imooc.com/class/355.html