📄 tlsa讲义05章.txt
字号:
第五章 进程管理
程序:指令的有序集合。
进程:是正在执行的程序。并发执行。进程之间相互制约、相互依赖。提高了系统利用率。运行时有不同状态。
第五章 进程管理
进程由程序代码、程序占用资源以及维持程序当前状态的信息组成。
内核程序根据状态信息在所有进程间分配CPU时间片、内存、文件及I/O等资源,且可利用状态信息判断进程走向。
第五章 进程管理
进程也称为任务。
Linux是一种多任务操作系统,通过时间片轮转机制调度进程。
进程转换可称为“上下文”切换。
Linux执行强占多任务机制,可强制上下文切换
第五章 进程管理
进程的状态信息存储在内核程序维护的进程控制块(PCB)中。所有的PCB存储在内核程序的进程表中。
每个进程有一个唯一的进程ID(PID),通过PID唯一标识自身。
init是系统最初始的进程,PID为1,所有其它进程都直接或间接产生自init进程
第五章 进程管理
除init进程外的其它进程都记录了自身父进程的PID,即PPID。且继承了三个打开的文件stdin、stdout、stderr。
线程是进程中指令的不同执行路线,它与属于同一进程的其他线程共享其代码段、数据段和其他操作系统资源。
5.1.1 创建进程
程序每次执行通常都会创建新的进程
可以用exec命令来请求在执行一个程序时不创建新的进程。通常,exec命令将用新的进程映像取代现有的进程映像。
例如:exec vi
通常此操作可用来替换shell,vi退出就直接退出shell了。
5.1.1 创建进程
一般进程是派生出来的,是父进程的一个复制品,包括可执行代码、数据、环境、变量等。
实际上父子共享同一段内存,直到有变化产生。copy-on-write,管理内存的有效途径。
5.1.2 监视进程
进程控制块(PCB)中的重要信息
进程ID(PID)
父进程ID(PPID)
实际用户和组ID(EUID和EGID)
进程状态
信号状态
5.1.2 监视进程
PID是标识进程的唯一整形数,按数字次序分配,所以init的PID为1。Linux中PID上限为32767,超出后从1开始,且不和已存在的重复。
查看进程及属性的命令ps
5.1.2 监视进程
名称:ps
使用权限:所有使用者
使用方式:ps [options] [--help]
说明:显示瞬间进程 (process) 的状态
选项有两套,有-和没有-的
5.1.2 监视进程
参数:
ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义
-e或-A显示所有进程。
-f全格式。
-h不显示标题。
-l长格式。
-w宽输出。
5.1.2 监视进程
a显示终端上的所有进程,包括其他用户的进程。
r只显示正在运行的进程。
x显示没有控制终端的进程。
u用户名格式
j 任务控制格式
最常用的三个参数是a 、 u 、x
5.1.2 监视进程
au(x) 输出格式 :
USER: 进程拥有者
PID: 进程ID
%CPU: 占用的 CPU 使用率
%MEM: 占用的内存使用率
VSZ: 占用的虚拟内存大小
RSS: 占用的内存大小
TTY: 终端号码
5.1.2 监视进程
STAT: 进程的状态:
D: 不可中断的休眠态
R: 正在执行中
S: 休眠状态
T: 终止运行状态
Z: 僵尸状态
5.1.2 监视进程
W: 没有足够的内存分页可分配
<: 高优先级的进程
N: 低优先级的进程
L: 有内存分页分配并锁在内存内 (实时系统或 I/O)
START: 进程开始时间
TIME: 执行的时间
COMMAND:所执行的指令
5.1.2 监视进程
与ps相关的命令,w和who。显示在每个tty上已登陆的用户、登陆延续的时间,及其正在运行的程序
最重要的系统监视工具top,该命令根据使用资源的次序列出正在运行的进程,默认情况下,每5秒刷新一次。默认是根据CPU占用的情况排序
5.1.2 监视进程
top
1.作用
top命令用来显示执行中的程序进程,使用权限是所有用户。
2.格式
top [-] [d delay] [q] [c] [S] [s] [i] [n]
5.1.2 监视进程
3.主要参数
d:指定更新的间隔,以秒计算。
q:没有任何延迟的更新。如果使用者是超级用户,则top命令将会以最高的优先序执行。
c:显示进程完整的路径与名称。
S:累积模式,会将己完成或消失的子进程的CPU时间累积起来。
5.1.2 监视进程
s:安全模式。
i:不显示任何闲置(Idle)或无用(Zombie)的进程。
n:显示更新的次数,完成后将会退出top。
5.1.2 监视进程
第一行表示的项目依次为当前时间、系统启动时间、当前系统登录用户数目、平均负载。
第二行显示的是所有启动的进程、目前运行的、挂起(Sleeping)的和无用(Zombie)的进程。
第三行显示的是目前CPU的使用情况,包括系统占用的比例、用户使用比例、闲置(Idle)比例。
5.1.2 监视进程
第四行显示物理内存的使用情况,包括总的可以使用的内存、已用内存、空闲内存、缓冲区占用的内存。
第五行显示交换分区使用情况,包括总的交换分区、使用的、空闲的和用于高速缓存的大小。
第六行显示的项目最多,下面列出了详细解释。
5.1.2 监视进程
PID(Process ID):进程标示号。
USER:进程所有者的用户名。
PR:进程的优先级别。
NI:进程的优先级别数值。
SIZE:进程大小。
RSS:进程占用的物理内存值。
SHARE:进程使用的共享内存值。
5.1.2 监视进程
STAT:进程的状态,S表示休眠,R表示正在运行,Z表示僵死状态等
%CPU:该进程占用的CPU使用率。
%MEM:该进程占用的物理内存和总内存的百分比。
5.1.2 监视进程
TIME:该进程启动后占用的总的CPU时间。
Command:进程启动的启动命令名称。
5.1.2 监视进程
top命令使用过程中,还可以使用一些交互的命令来完成其它参数的功能。这些命令是通过快捷键启动的。
<空格>:立刻刷新。
P:根据CPU使用大小进行排序。
T:根据时间、累计时间排序。
q:退出top命令。
5.1.2 监视进程
m:切换显示内存信息。
t:切换显示进程和CPU状态信息。
c:切换显示命令名称和完整命令行。
M:根据使用内存大小进行排序。
W:将当前设置写入~/.toprc文件中。
第五章 进程管理(2)
/proc文件系统。可以获取当前系统中正在运行的进程信息。
以PID为目录名
5.1.3 管理进程
优先级:内核通过优先级大小来判断何时及如何安排进程。
静态值和动态值。静态值也称 niceness一般不会改变。动态值在实际运行时由内核来改变。
我们通常讨论的优先级为静态优先级
5.1.3 管理进程
优先级值的范围从-20到20。大部分进程的优先级为0。
值越小优先级越高。
改变优先级值可用nice命令
5.1.3 管理进程
名称:nice
使用权限:所有使用者
使用方式:nice [-n adjustment] [-adjustment] [--adjustment=adjustment] [--help] [--version] [command [arg...]]
说明:以更改过的优先级值来执行程序, 如果未指定程序, 则会打印出当前的进程优先级值
5.1.3 管理进程
例如:nice –n x top或
nice -x top
默认的 调节值为 10
x范围为 -20 (最高优先序) 到 19 (最低优先序)
5.1.3 管理进程
名称:renice
使用权限:所有使用者
使用方式:renice priority [[-p] pid ...] [[-g] pgrp ...] [[-u] user ...]
说明:重新指定一个进程的优先级值
5.1.3 管理进程
nice和renice不同
[1] nice要求指定优先级的变化量,
renice要求指定最终的优先级值
[2] nice要求数值之前用-,renice不要
求
5.1.3 管理进程
后台进程&,显示任务号和进程号
命令jobs可查看正在运行的任务
后台任务完成会显示完成信息。
使用fg命令可将后台程序移至前台
也可通过CONTROL+z挂起前台任务,然后用bg命令将挂起的任务移到后台
5.1.3 管理进程
通常退出shell时,相应的进程都会终结
可使用nohup命令使程序在用户退出后继续运行。
nohup命令的进程会将其输出加在当前目录下名为nohup.out的文件中
5.2 信号
进程之间通讯通过信号来实现,内核可通过信号来控制进程
信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达
5.2 信号
信号是进程间通信机制中唯一的异步通信机制,可以看作是异步通知,通知接收信号的进程有哪些事情发生了。
信号事件的发生有两个来源:硬件来源(比如我们按下了键盘或者其它硬件故障);软件来源,最常用发送信号的系统函数是kill等函数,软件来源还包括一些非法运算等操作。
5.2 信号
信号的完整列表kill –l
5.2 信号
可以通过stty –a命令查看信号所对应的按键。只有INTR、QUIT和SUSP字符属于信号,而其他属于终端函数。
Linux进程间通讯的途径之一是信号。利用信号来中断进程的执行是一种高级的方法。
可用kill命令来向进程发信号
5.2 信号
名称:kill
使用权限:所有使用者
使用方式:
kill [ -s signal] pid ...
kill -l [ signal ]
说明:kill 送出一个特定的信号 (signal) 给进程, id 为 pid 的进程根据该信号而做特定的动作, 若没有指定, 默认是送出终止 (TERM) 的信号
5.2 信号
-s (signal) : 其中可用的讯号有 HUP (1), KILL (9), TERM (15), 分别代表重新启动, 杀死, 终止; 详细的信号可以用 kill -l 查看。
-l (signal) : 列出所有可用的信号名称
范例:
将 pid 为 816 的进程砍掉 (kill) :
kill -9 816
将 pid 为 817 的进程重启 (restart) :
kill -HUP 817
5.3 DAEMON
支持系统服务的进程。守护进程。系统引导时就启动,在系统关闭时终止。一般没有控制终端,在后台运行,提供特定的服务。
守护进程的程序命名通常在最后加一个 “d”。 named, httpd,lpd。这只是一种惯例,不是标准或硬性规定。 例如,为Sendmail而应用的主要mail守护进程就叫sendmail,却不叫maild。
5.3 DAEMON
Daemon一般会等待某个事件,如信号、创建文件、超时或从网络输入数据等,当时间发生,daemon被唤醒去服务。一般会派生一个子进程去处理事件。
查看daemon或其他没有控制终端的进程可用命令ps –t
5.4 内存
Linux使用虚拟内存系统,分页虚拟内存管理。
free命令的功能是查看当前系统内存的使用情况,它显示系统中剩余及已用的物理内存和交换内存,以及共享内存和被核心使用的缓冲区。
5.4 内存
该命令的一般格式为: free [-b | -k | -m] 命令中各选项的含义如下:
-b 以字节为单位显示。
-k 以K字节为单位显示。
-m 以兆字节为单位显示。
默认为以K字节显示
5.4 内存
vmstat命令显示虚拟内存系统相关的统计信息,包括进程、内存、交换分区、输入输出、系统中断和CPU等情况。
memstat(有些系统上没有),报告所使用的虚拟内存数量的同时还会返回正在运行的进程、共享库及所有的虚拟内存。
5.4 内存
core文件:在UNIX下调试程序,如果遇到内存溢出等问题的时候,经常在当前目录下出现这样一个文件:core
core是一个很大的文件,动辄上百M,很是耗费硬盘空间,其实core中放置的是执行进程的内存映像,其中的提示信息core dump就是信息转储的意思,在调试一个有问题的程序时它经常是很起作用的。
5.4 内存
core文件之所以这么大,是因为它包括了所有用来调试的信息:堆栈,数据,代码指针等等,无所不包,除了程序的动态状态。
5.4 内存
ulimit
用途:设置或报告用户资源极限
-a列出所有当前资源极限。
-c以 512 字节块为单位,指定核心转储的大小。
-d以 K 字节为单位指定数据区域的大小。
-f使用 Limit 参数时设定文件大小极限(以块计),或者在未指定参数时报告文件大小极限。缺省值为 -f 标志。
5.4 内存
-m以 K 字节为单位指定物理存储器的大小。
-n指定一个进程可以拥有的文件描述符的数量的极限。
-s以 K 字节为单位指定堆栈的大小。
-p管道大小
-u进程数的上限
5.4 内存
-t指定每个进程所使用的秒数
-v虚拟内存的上限
例如:要将文件大小极限设置为 51,200 字节,输入:
ulimit -f 100
5.5 启用进程统计
启用进程统计。内核是进程统计全部信息的来源。
内核一旦支持进程统计,就可以安装进程统计软件psacct。
日志文件/var/log/pacct或者/var/adm/pacct
5.5.2 查看日志信息
开启了进程统计,就能查看它收集的所有信息。
ac 命令
用途:打印连接时间记录。
连接时间记录由 init 和 login 程序创建,并收集在 /var/log/wtmp 文件中(如果该文件存在)。
5.5.2 查看日志信息
ac无参数为所有时间总和
-p 为每个用户的
-d 为每天的
单位为小时。如果一个用户一次登陆多个终端,每个终端都会增加时间
5.5.2 查看日志信息
名令:last
使用权限:所有使用者
显示用户登录和退出的具体时间和开机的情况
-num 展示前 num 个
username 展示 username 的登入讯息
tty 限制登入讯息包含终端机代号
5.5.2 查看日志信息
Lastcomm命令
lastcomm 命令以逆向时间顺序显示关于仍记录在 /var/log/pacct 目录下的摘要文件中的先前执行的命令的信息。
lastcomm 命令的使用需要先启用进程统计功能,
#/usr/sbin/accton /var/log/pacct
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -