1 程序
保存在硬盘、光盘等介质中的可执行代码和数据
静态保存的代码
2 进程
2.1 什么是进程
运行中的程序的一个副本,是被载入内存的一个指令集合,是资源分配的单位。
- 在CPU及内存中运行的程序代码
- 动态执行的代码
- 进程ID(Process ID,PID)号码被用来标记各个进程
- UID、GID、和SELinux语境决定对文件系统的存取和访问权限
- 通常从执行进程的用户来继承
- 存在生命周期
- 都由其父进程创建
- 已分配内存的地址空间;
- 安全属性,包括所有权凭据和特权;
- 有权限限制;
- 程序代码的一个或多个执行线程;
父进程复制自己的地址空间(fork派生)创建一个新的(子)进程结构。
每个进程分配一个唯一的进程ID(PID),满足跟踪安全性之需。
任何进程都可以创建子进程。
所有进程都是第一个系统进程的后代。
![](/i/l/?n=22&i=blog/2964616/202210/2964616-20221011140221975-1624845297.png)
2.2 进程具有的特征
- 动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的;
- 并发性:任何进程都可以同其他进程一起并发执行;
- 独立性:进程是系统进行资源分配和调度的一个独立单位;
- 结构性:进程由程序、数据和进程控制块三部分组成。
2.3 僵尸进程
僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。如果父进程先退出 ,子进程被init接管,子进程退出后init会回收其占用的相关资源。
在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他, 那么他将变成一个僵尸进程。 但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程, 因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程, 看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由init 来接管他,成为他的父进程。
3 查看进程
3.1 ps命令——静态查看进程
ps 命令是 Process Status 的缩写 ,可以查看进程当前状态的快照。查看静态的进程统计信息,即执行 ps 命令的那个时刻的进程快照。默认显示当前终端中的进程,Linux系统各进程的相关信息均保存在/proc/PID 目录下的各文件中。
a | 显示当前终端下的所有进程信息,包括其他用户的进程。与“x”选项结合时将示系统中所有的进程信息。 |
u | 使用以用户为主的格式输出进程信息。 |
x | 显示当前用户在所有终端下的进程信息。 |
-e | 显示系统内的所有进程信息 |
-l | 使用长(Long)格式显示进程信息。 |
-f | 使用完整的(Full)格式显示进程信 |
k|--sort 属性:对属性排序,属性前加 - 表示降序排列。 |
使用“ps aux”命令查看进程信息:
![](/i/l/?n=22&i=blog/2964616/202210/2964616-20221011142250700-961519892.png)
进程信息共有11个字段,每个字段含义如下:
user | 该进程是由哪个用户产生的。 |
pid | 进程的 ID。 |
%cpu | 该进程占用 CPU 资源的百分比,占用的百分比越高,进程越耗费资源。 |
%men | 该进程占用物理内存的百分比,占用的百分比越高,进程越耗费资源。 |
vsz | 该进程占用虚拟内存的大小,单位为 KB。 |
rss | 该进程占用实际物理内存的大小,单位为 KB。 |
tty | 该进程是在哪个终端运行的。 其中,tty1 ~ tty7 代表本地控制台终端(可以通过 Alt+F1 ~ F7 快捷键切换不同的终端),tty1~tty6 是本地的字符界面终端,tty7 是图形终端。 pts/0 ~ 255 代表虚拟终端,一般是远程连接的终端,第一个远程连接占用 pts/0,第二个远程连接占用 pts/1,依次増长。 明出处。 |
stat | 进程状态。常见的状态有以下几种: -D:不可被唤醒的睡眠状态,通常用于 I/O 情况。 -R:该进程正在运行。 -S:该进程处于睡眠状态,可被唤醒。 -T:停止状态,可能是在后台暂停或进程处于除错状态。 -W:内存交互状态(从 2.6 内核开始无效)。 -X:死掉的进程(应该不会出现)。 -Z:僵尸进程。进程已经中止,但是还是占用硬件资源。 -<:高优先级(以下状态在 BSD 格式中出现)。 -N:低优先级。 -L:被锁入内存。 -s:包含子进程。 -l:多线程(小写 L)。 -+:进程位于后台。 |
start | 该进程的启动时间。 |
time | 该进程占用 CPU 的运算时间,注意不是系统时间。 |
command | 产生此进程的命令名。 |
![](/i/l/?n=22&i=blog/2964616/202210/2964616-20221011183912551-2132107252.png)
上图字段解释:
大部分跟第一种一样,PPID为父进程的PID。
top
以全屏交互式的界面显示进程排名,及时跟踪包括CPU、内存等系统资源占用情况,默认情况下每三秒刷新一次,其作用基本类似于Windows系统中的任务管理器。
![](/i/l/?n=22&i=blog/2964616/202210/2964616-20221011190235399-1488969076.png)
上图解释:
Tasks(系统任务)信息:total,总进程数;running,正在运行的进程数;sleeping,休眠的进程数;stopped,中止的进程数;zombie,僵死无响应的进程数。
CPU信息:us,用户占用;sy,内核占用;ni,优先级调度占用;id,空闲CPU;wa,I/O等待占用;hi,硬件中断占用;si,软件中断占用;st,虚拟化占用。了解空闲的CPU百分比,主要看%id部分。
Mem(内存)信息:total,总内存空间;used,已用内存;free,空闲内存;buffers,缓存区域。
Swap(交换空间)信息:total,总交换空间;used,已用交换空间;free,空闲交换空间;cached,缓存空间。
pstree -aup可以带上|grep 查询特定进程。例如 pstree -aup | grep php
![](/i/l/?n=22&i=blog/2964616/202210/2964616-20221011191225790-1342906916.png)
以树状图的方式展现进程之间的派生关系,显示效果比较直观。
-a:显示每个程序的完整指令,包含路径,参数或是常驻服务的标示;
-c:不使用精简标示法;
-G:使用VT100终端机的列绘图字符;
-h:列出树状图时,特别标明现在执行的程序;
-H<程序识别码>:此参数的效果和指定"-h"参数类似,但特别标明指定的程序;
-l:采用长列格式显示树状图;
-n:用程序识别码排序。预设是以程序名称来排序;
-p:显示程序识别码;
-u:显示用户名称;
lsof命令
lsof 命令,“list opened files”的缩写,直译过来,就是列举系统中已经被打开的文件。通过 lsof 命令,我们就可以根据文件找到对应的进程信息,也可以根据进程信息找到进程打开的文件。
-c 字符串 | 只列出以字符串开头的进程打开的文件。 |
+d 目录名 | 列出某个目录中所有被进程调用的文件。 |
-u 用户名 | 只列出某个用户的进程打开的文件。 |
-p pid | 列出某个 PID 进程打开的文件。 |
示例
![](/i/l/?n=22&i=blog/2964616/202210/2964616-20221012185817411-936289864.png)
如果想动态地了解一下系统资源的使用状况,以及查看当前系统中到底是哪个环节最占用系统资源,就可以使用 vmstat 命令。
vmstat命令,是 Virtual Meomory Statistics(虚拟内存统计)的缩写,可用来监控 CPU 使用、进程状态、内存使用、虚拟内存使用、硬盘输入/输出状态等信息。
procs | 进程信息字段: -r:等待运行的进程数,数量越大,系统越繁忙。 -b:不可被唤醒的进程数量,数量越大,系统越繁忙。 |
memory | 内存信息字段: -swpd:虚拟内存的使用情况,单位为 KB。 -free:空闲的内存容量,单位为 KB。 -buff:缓冲的内存容量,单位为 KB。 -cache:缓存的内存容量,单位为 KB。 |
swap | 交换分区信息字段: -si:从磁盘中交换到内存中数据的数量,单位为 KB。 -so:从内存中交换到磁盘中数据的数量,单位为 KB。 这两个数越大,表明数据需要经常在磁盘和内存之间进行交换,系统性能越差。 |
io | 磁盘读/写信息字段: -bi:从块设备中读入的数据的总量,单位是块。 -bo:写到块设备的数据的总量,单位是块。这两个数越大,代表系统的 I/O 越繁忙。 |
system | 系统信息字段: -in:每秒被中断的进程次数。 -cs:每秒进行的事件切换次数。 这两个数越大,代表系统与接口设备的通信越繁忙。 |
cpu | CPU信息字段: -us:非内核进程消耗 CPU 运算时间的百分比。 -sy:内核进程消耗 CPU 运算时间的百分比。 -id:空闲 CPU 的百分比。 -wa:等待 I/O 所消耗的 CPU 百分比。 -st:被虚拟机所盗用的 CPU 百分比 |
通过分析 vmstat 命令的执行结果,可以获得一些与当前 Linux 运行性能相关的信息。比如说:
- r 列表示运行和等待 CPU 时间片的进程数,如果这个值长期大于系统 CPU 的个数,就说明 CPU 不足,需要增加 CPU。
- swpd 列表示切换到内存交换区的内存数量(以 kB 为单位)。如果 swpd 的值不为 0,或者比较大,而且 si、so 的值长期为 0,那么这种情况下一般不用担心,不用影响系统性能。
- cache 列表示缓存的内存数量,一般作为文件系统缓存,频繁访问的文件都会被缓存。如果缓存值较大,就说明缓存的文件数较多,如果此时 I/O 中 bi 比较小,就表明文件系统效率比较好。
- 一般情况下,si(数据由硬盘调入内存)、so(数据由内存调入硬盘) 的值都为 0,如果 si、so 的值长期不为 0,则表示系统内存不足,需要增加系统内存。
- 如果 bi+bo 的参考值为 1000 甚至超过 1000,而且 wa 值较大,则表示系统磁盘 I/O 有问题,应该考虑提高磁盘的读写性能。
- 输出结果中,CPU 项显示了 CPU 的使用状态,其中当 us 列的值较高时,说明用户进程消耗的 CPU 时间多,如果其长期大于 50%,就需要考虑优化程序或算法;sy 列的值较高时,说明内核消耗的 CPU 资源较多。通常情况下,us+sy 的参考值为 80%,如果其值大于 80%,则表明可能存在 CPU 资源不足的情况。
总的来说,vmstat 命令的输出结果中,我们应该重点注意 procs 项中 r 列的值,以及 CPU 项中 us 列、sy 列和 id 列的值。
控制进程
·前台启动:用户输入命令,直接执行程序
·后台启动:命令行尾加入“$”符号
调度启动
.使用at命令,设置一次性任务
.使用crontab命令,设置周期性计划任务
挂起进程
Ctrl+z组合键:
将当前进程挂起,即调入后台并停止执行
查看后台进程
Jobs命令
-l:查看处于后台的任务列表
恢复后台挂起的进程到前台
Fg命令
将后台进程恢复到前台运行,可指定任务序号
终止进程的运行
Ctrl+c组合键
中断正在执行的命令
Kill killal:
kill用于终止指定PID号的进程
Killal用于终止指定名称相关的所有进程
Pkill命令
根据特定条件终止相应的进程
常用命令选项
-u:根据进程所属的用户终止相应进程
-t:根据进程所在的低端终止相应进程
Sigterm -15 让进程自行并退出
Sickill -9选项用于强制终止,且不能忽略
crontab命令
按照预先设置的时间周期(分钟、小时、天、月、周)
重复执行用户指定的命令操作
属于周期性计划任务
主要设置文件
全局配置文件
调度任务
Crontab计划任务
编辑:-e -u 用户名
查看:-l -u
删除 -r -u
调度任务
一次性计划任务
At hh:mm yyyy-mm-dd 指定时间编辑
Ctrl+d提交任务
Atq查询任务列表
Atrm删除任务
周期性计划任务
开启 cround 服务
Croundab -e -u指定用户
/var/spool/scrn/客户
分 时 日 月
* , - /
4总结
查看进程命令
静态查看:ps aux,ps -elf
动态查看:top
查看指定进程:prtstat
以树形结构列出:pstree
列举被打开的文件:lsof
监控系统资源:vmstat、iostat
发现僵尸进程(状态为Z)一定要杀掉。
“cat /proc/PID/status" 可以查看指定进程具体有几个线程。
2、控制进程- 后台启动:
命令行尾加”&“符号。
- 前后台调度:
ctrl+z 挂起当前进程,
jobs查看任务列表
fg 序号,将前台进程调到后台运行。
bg 序号,将后台暂停的进程恢复执行状态。
- 修改优先级:
nice,启动程序时设置优先级。
renice,修改现有进程的优先级。
- 杀死进程:
kill [信号] PID
killall 进程名
pkill [信号] [-U 用户名]
pkill [信号] [-t 终端名]
- crontab周期性任务设置
crontab -e:编辑计划任务。
crontab -l:查看计划任务。
时间格式:分、时、日、月、周几。 可以查看cat /etc/crontab 文件。
*表示任意。
,表示多个不连续的时间点。
-表示连续的时间范围。
/表示频率。
命令要使用绝对路径。
6个选项(时间+任务)都不能为空,必须填写。
标签:占用,信息,命令,任务,计划,内存,进程,CPU From: https://www.cnblogs.com/jct166289/p/16776938.html