目录
一、进程介绍
1.1、什么是进程?
进程( Process )是一个程序在其自身的
虚拟地址空间中的一次执行活动。之所以要创建进程,就是为了使
多个程序可以并发的执行,从而提高系统的资源利用率和吞吐量。简单来说
进程就是一个程序的执行活动。
1.2、进程和程序有什么不同?(软件是指令和数据的集合)
程序:只是一个静态的指令集合;而
进程是一个程序的动态执行过程,它具有
生命期,是动态的产生和消亡的。
进程:
是资源申请、调度和独立运行的单位,因此,它使用系统中的运行资源;而程序不能申请系统资源、不能被系统调度、也不能作为独立运行的单位,因此,它不占用系统的运行资源。
程序和进程无一一对应的关系。一方面一个程序可以由多个进程所共用,即一个程序在运行过程中可以产生多个进程;另一方面,
一个进程在生命期内可以顺序的执行若干个程序。
1.3、进程的属性
在 Linux 系统中总是有很多进程同时在运行,每一个进程都有一个识别号,叫做
PID(Process ID),用以区分不同的进程。
除了进程识别号外,每个进程还有另外四个识别号。它们是
实际用户识别号(real user ID)、实际组识别号(real group ID)以及有效用户识别号( effect user ID ),和有效组识别号( effect group ID )。实际用户识别号和实际组识别号的作用是识别正在运行此进程的用户和组。一个进程的实际用户识别号和实际组识别号就是运行此进程的用户的识别号( UID )和组的识别号( GID )。
有效用户识别号和有效组识别号的作用是确定一个进程对其访问的文件的权限和优先权。一般有效用户识别号和有效组识别号和实际用户识别号及实际组识别号相同。除非程序被设置了 SUID 位或 SGID 位。
1.4、进程间的父子关系
进程之间是有关联性的,有的进程会衍生出额外的进程,这时,这组进程之间就存在了父子关系,衍生出来的进程叫子进程,而原本的进程叫做父进程。
二、linux 的工作调度
由于 linux 是一个多人多任务的操作系统,所以用户在使用 linux 的时候就会出现有些工作我们需要盯着完成的进度,而有些工作我们直接放在后台执行就可以了,这里面我们就涉及到任务的前后台执行的问题,那么,如何将一个任务放到后台去执行呢?
2.1、开启一个在后台执行的工作
# 使用 &
[root@long90 workdir]# tar -czf test.tar.gz /etc & # & 表示后台执行
[1] 2805 # [1] 工作序号; 2805 进程号
[root@long90 workdir]# ls
nginx-1.19.3 nginx-1.19.3.tar.gz test.tar.gz
[1]+ 已完成 tar -czf test.tar.gz /etc
执行完成后,会在下次敲回车的时候给用户一个反馈
[1]+ 已完成 tar -czf test.tar.gz /etc
2.2、将当前的工作调到后台
[root@long90 workdir]# cp ~/anaconda-ks.cfg .
[root@long90 workdir]# ls
anaconda-ks.cfg nginx-1.19.3 nginx-1.19.3.tar.gz test.tar.gz
[root@long90 workdir]# vim anaconda-ks.cfg # 按键盘上的 ctrl+z 是调到后台
[1]+ 已停止 vim anaconda-ks.cfg
2.3、后台工作的查看及状态的更改 jobs
[root@long90 workdir]# jobs
[1]+ 已停止 vim anaconda-ks.cfg
[root@long90 workdir]# jobs -l
[1]+ 2863 停止 vim anaconda-ks.cfg
[root@long90 workdir]# jobs -s
[1]+ 已停止 vim anaconda-ks.cfg
+: 当使用命令将后台任务调到前台时,默认调用有此标记的任务,也就是最近被调到后台的
-: 倒数第二个被调到后台的任务
[root@long90 workdir]# jobs -r
[root@long90 workdir]# jobs +r
[1]+ 已停止 vim anaconda-ks.cfg
# fg %工作序号(%可省略) 将后台指定的工作调到前台
[root@long90 workdir]# fg 1
vim anaconda-ks.cfg
jobs 连续执行两条命令,1.使用 bg 命令将之前的工作状态更改为运行;
2.立即使用 jobs 命令查看状态
注意:更改后台工作状态和查看后台工作状态的命令也可以在终端分别输入,但是如果命令执行的较快的话可能会出现下面的这种情况,
也就是状态显示为已完成
[root@long90 workdir]# vim anaconda-ks.cfg # ctrl + z
[1]+ 已停止 vim anaconda-ks.cfg
[root@long90 workdir]# find / -name \*a\* > test.txt # ctrl + z
^Z
[2]+ 已停止 find / -name \*a\* > test.txt
[root@long90 workdir]# jobs
[1]- 已停止 vim anaconda-ks.cfg
[2]+ 已停止 find / -name \*a\* > test.txt
[root@long90 workdir]# bg %2
[2]+ find / -name \*a\* > test.txt &
[root@long90 workdir]# find: ‘/proc/2872’: 没有那个文件或目录
find: ‘/proc/2939’: 没有那个文件或目录
[root@long90 workdir]# jobs
[1]+ 已停止 vim anaconda-ks.cfg
[2]- 退出 1 find / -name \*a\* > test.txt
[root@long90 workdir]# fg 2
-bash: fg: 2: 无此任务
[root@long90 workdir]# jobs
[1]+ 已停止 vim anaconda-ks.cfg
2.4、管理后台工作
我们可以通过 kill 命令配合适当的信号来管理后台的工作,信号是进程间通信的最原始机制,不同的信号,有不同的作用,比如说,一个进程接收到了一个让它打开指定文件的信号,那这个进程就去打开这个文件,而不会去考虑原因。
命令
格式:kill %工作序号
-
-l 查看
-
-1 重新加载,systemctl reload servername
-
-2 保存数据并结束 ctrl + c
-
-9 强制结束不管其状态 常用在无法正常终止的程序上
-
-15 正常结束(默认值) systemctl stop servername
[root@long90 workdir]# jobs
[1]+ 已停止 vim anaconda-ks.cfg
[root@long90 workdir]# kill -9 %1
[1]+ 已停止 vim anaconda-ks.cfg
[root@long90 workdir]# jobs
[1]+ 已杀死 vim anaconda-ks.cfg
[root@long90 workdir]# jobs
三、进程的查看与管理
在 linux 中,我们可以通过 fg、bg、jobs、kill 等来对工作进行管理和调度,这些工作都是我们手动执行的,而那些由系统开启的工作该如何管理呢?管理这些后台工作我们可以使用两种命令 ps和 top
3.1、ps 命令:
静态进程管理命令,可以帮助我们查看到
ps 命令在执行那一刻后台进程的状态
参数说明:
-
-A