文章一览
- 前言
- 一、多道程序设计
- 1.1 顺序程序活动的特点
- 1.2 多道程序设计
- 1.3 程序并发执行的特征
- 二、进程概念
- 2.1 进程定义
- 进程的根本属性:
- 2.2 进程的基本特征
- 三、进程状态
- 3.1 进程的基本状态
- 3.2 进程状态的转换
- 3.3 进程族系
- 四、进程管理命令
- 4.1 查看进程状态
- 4.1.1 ps命令
- 4.1.2 ps命令输出常见的域
- 4.2 进程管理
- 4.2.1 kill命令
- 4.2.2 sleep命令
- 4.2.3 nice命令
- 4.2.4 nohup命令
- 4.2.5 wait命令
- 五、Shell
- 六、其他常用命令
- 6.1 磁盘使用情况统计
- 6.1.1 df 命令
- 6.1.2 du命令
- 6.2 文件压缩和解压缩
- 6.2.1 gzip命令
- 6.2.2 unzip命令
- 6.3 进程控制——前台进程转为后台进程
前言
在Linux操作系统的复杂而精妙的架构中,进程管理扮演着核心角色,它是操作系统协调资源、调度任务和维护系统稳定性的关键。从简单的命令执行到复杂的后台服务,每个操作都涉及到进程的创建、监控和终止。了解Linux中的进程管理,就是掌握了操作系统的脉搏,能够洞察系统内部的动态变化,优化性能,确保安全,以及实现高效的资源利用。让我们深入探讨Linux进程管理的奥秘,学习如何驾驭这些并发运行的任务,以及如何通过精细的进程控制来提升整个系统的效能和响应能力。
一、多道程序设计
1.1 顺序程序活动的特点
- 顺序程序活动具有顺序性、封闭性和可再现性三个主要特点
- 如执行顺序指令、循环、函数调用等
- 单道程序系统具有资源浪费、效率低等明显缺点。已不再采用
1.2 多道程序设计
多道程序设计是在内存中同时存放多道程序,它们在管理程序的控制下交替地在CPU上运行。
- 大大改进系统性能
- 吞吐量增加
程序的并发执行和系统资源的共享使得操作系统的工作变得很复杂
1.3 程序并发执行的特征
- ① 失去封闭性。并发执行的多个程序共享系统中的资源,因而这些资源的使用状态不再仅由某个程序所决定,而是受到并发程序的共同影响。
- ② 程序与计算不再一 一对应。“程序”是指令的有序集合,是“静态”概念;而“计算”是指令序列在处理机上的执行过程,是“动态”概念。
- ③ 并发程序在执行期间相互制约。并发程序的执行过程不再像单道程序系统那样总是顺序连贯的,而具有“执行—暂停—执行”的活动规律,各程序活动的工作状态与所处的系统环境密切相关。
二、进程概念
2.1 进程定义
由于多道程序并发执行时共享系统资源,共同决定这些资源的状态,因此系统中各程序在执行过程中就出现了相互制约的新关系,程序的执行出现“走走停停”的新状态。
用程序这个静态概念已不能如实反映程序并发执行过程中的这些特征。
进程(或任务)是在60年代中期由美国麻省理工学院(MIT)J.H.Saltzer首先提出的,并在所研制的MULTICS系统上实现。IBM公司把进程叫做任务(task),它在TSS/360系统中实现了。
进程定义:程序在并发环境中的执行过程。
进程是已启动的可执行程序的运行实例,进程有以下组成部分:
- 已分配内存的地址空间;
- 安全属性,包括所有权凭据和特权;
- 程序代码的一个或多个执行线程;
- 进程状态
程序: 二进制文件,静态 /bin/date, /usr/sbin/httpd,/usr/sbin/sshd, /usr/local/nginx/sbin/nginx
进程: 是程序运行的过程, 动态,有生命周期及运行状态。
进程的根本属性:
“进程”是操作系统的最基本、最重要的概念之一。进程最根本的属性是动态性和并发性。
2.2 进程的基本特征
- ①动态性
进程是程序的执行过程,它有生有亡,有活动有停顿。可以处于不同的状态。
- ②并发性
多个进程的实体能存在于同一内存中,在一段时间内都得到运行。
- ③调度性
进程是系统中申请资源的单位,也是被调度的单位。
- ④异步性
各进程向前推进的速度是不可预知的,即异步方式运行。
- ⑤结构性
进程有一定的结构,它由程序段、数据段和控制结构(如进程控制块)等组成。
三、进程状态
3.1 进程的基本状态
进程至少要有三种基本状态
- ①运行态(Running)
它的程序正在处理机上执行
- ②就绪态(Ready)
进程已具备运行条件,但因为其它进程正占用CPU,所以暂时不能运行而等待分配CPU的状态。
- ③阻塞态(Blocked)
进程因等待某种事件发生(例如等待某一输入、输出操作完成,等待其它进程发来的信号等)而暂时不能运行的状态。
3.2 进程状态的转换
进程在其生存期间不断发生状态转换——从一种状态变为另一种状态。
进程状态的转换需要一定的条件和原因。
状态转换:
(1)就绪->运行
- 处于就绪状态的进程被调度程序选中,分配到CPU
(2)运行->阻塞
- 正在运行的进程因某种条件未满足而放弃对CPU的占用
(3)阻塞->就绪
- 处于阻塞状态的进程所等待的事件发生了
(4)运行->就绪
- 正在运行的进程如用完了本次分配给它的CPU时间片
在很多系统中,又增加了两种基本进程状态,即新建状态和终止状态。
3.3 进程族系
父进程创建子进程,子进程再创建子进程,……
树的根结点(即第一个进程0#)是所有进程的祖先。
四、进程管理命令
4.1 查看进程状态
4.1.1 ps命令
ps命令是查看进程状态的最常用的命令,它可以提供关于进程的许多信息。
一般格式: ps [选项]
示例:
①直接用ps命令可以列出每个与你的当前shell有关的进程的基本信息:
②利用选项-ef可以显示系统中所有进程的全面信息:
ps -ef
③利用下面的命令可以显示所有终端上所有用户的有关进程的所有信息:
ps aux
其他选项:
ps -l 列出活动进程的详细状况;
ps -c 列出活动进程的优先级;
--forest 显示进程调用层次关系;
pstree 树形缩进形式显示进程调用关系;
top 动态显示进程变化情况,默认三秒更新一次;
4.1.2 ps命令输出常见的域
4.2 进程管理
4.2.1 kill命令
kill命令通过向进程发送指定的信号用来终止一个进程的运行。
一般格式:
kill [-s 信号|-p ] [-a] pid...
kill -l [信号]
kill命令是通过向进程发送指定的信号来结束相应进程(pid)的。在默认情况下,采用编号为15的TERM信号。用编号为9的KILL信号,可以强行“杀掉”该进程。
示例:
sleep 200 $ # 这里的$ 代表在后台运行
ps
kill 253
ps
# 再用ps命令查看进程状态时,就可以看到,sleep进程已经不存在了。
pgrep bash
4.2.2 sleep命令
使进程暂停由时间值所指定的秒数。此命令大多用于shell程序设计中,使两条命令执行之间停顿指定的时间。
下面的命令行使进程先暂停100秒,然后查看用户zhangyu是否在系统中:
sleep 100; who | grep 'zhangyu'
4.2.3 nice命令
Linux系统中,进程的优先级取决于两个因素:进程剩余时间配额和进程的优先数nice。优先数越小,其优先级越高。
用户可以利用nice命令设定进程的nice值。但一般用户只能设定正值,从而主动降低其优先级,只有特权用户才能把nice的值置为负数。
一般格式: nice [选项] [命令…]
示例:
sleep 300&
nice –n 5 sleep 300&
sudo nice –n -10 sleep 300&
ps –efl |grep sleep
4.2.4 nohup命令
nohup命令将忽略挂起信号对命令的影响而继续运行指定的命令(它可以带参数)。
一般格式: nohup 命令 [参数]…
示例:
nohup sleep 5 & #忽略挂起信号对命令的影响而继续运行sleep 5
jobs # 使用 jobs 查看任务
4.2.5 wait命令
wait命令的功能就是等待指定的进程,并返回其终止状态。
一般格式: wait [n]
n可以是进程的ID或者作业描述符
sleep 20 & #后台运行sleep 20,
#屏幕上打印出 [1] 10472
wait 10472 #wait命令可以使sleep 20执行完
wait %1 #wait命令的参数既可以是进程ID也可以是job参数。
五、Shell
Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。
实际上Shell是一个命令解释器, 它解释由用户输入的命令并且把它们送到内核。不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。 Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果。
六、其他常用命令
6.1 磁盘使用情况统计
6.1.1 df 命令
命令df可以报告文件系统中未用磁盘空间的情况。按照默认,磁盘盘块以1k字节为单位。
一般格式: df [选项]… [FILE]…
df
常用选项:
- 如果使用-a选项,则把不占用磁盘空间的文件系统也列出来。
df -a
-
-h 使用易读模式输出磁盘占用信息
df -h
6.1.2 du命令
命令du统计出每个目录占用磁盘空间的情况。该命令可以逐级进入每一个子目录并显示该目录的磁盘利用情况。
一般格式: du [选项]…[目录名]…
du
常用选项:
- -h 使用易读模式输出磁盘占用信息
du -h
- -s 表示summarize,仅显示统计量
du -s
du -sh . # . 表示当前目录下
6.2 文件压缩和解压缩
6.2.1 gzip命令
gzip命令用来对文件进行压缩和解压缩。
一般格式: gzip [选项] [name…]
name表示压缩(解压缩)文件名。被压缩文件的扩展名是**.gz, 并且保持原有的存取权限、访问与修改时间**。
示例:
把/home/cau/dir1目录下的每个文件都压缩成.gz文件:
常用选项:
- -v 显示出指令执行过程
# gzip -v nohup.out vitest.txt
- -dv 把上面压缩的文件进行解压缩,并列出详细的信息:
gzip -dv *
- -l 显示压缩文件的信息(详细列出上面每个压缩文件的信息,但是不执行解压缩)
gzip -l *
将本目录下的文件进行快速压缩,并显示其压缩比:
gzip -v --fast *
6.2.2 unzip命令
unzip命令对ZIP格式的压缩文件进行解压缩。这种格式的压缩文件带有后缀.zip。
一般格式: unzip [选项] 被压缩文件名
示例:
将压缩文件chapter1.zip在当前目录下解压缩:
unzip chapter1.zip
首先压缩当前目录下所有文件,存为unzip.zip
zip -v unzip.zip *
常用选项:
- -v 显示有关压缩文件的信息,但不作解压缩:
unzip -v chapter1.zip
6.3 进程控制——前台进程转为后台进程
yes ok
jobs #查看作业号
fg %1 #将作业号为1的作业由挂起状态转为前台进程运行
bg %1 #重新运行挂起的进程但是以后台方式运行,后台运行的任务无法用ctrl+z暂停
ps # 查看job进程号,并用kill终止
kill [pid]