目录
前言
在生产中有的进程需要关闭,所以我们要学会查找和关闭进程。有的程序需要周期性的执行,所以要制定周期性的计划。
一、程序和进程的关系
1.1 程序
保存在硬盘、光盘等介质至中的可执行代码和数据
文件中静态保存的代码
1.2 进程
在cpu及内存中运行的程序代码,动态执行的代码。包含父、子进程,每个程序可以创建一个或多
个进程。进程可以看成程序执行的一个实例。进程是系统资源分配的独立实体,每个进程都拥有独
立的地址空间。一个进程无法访问另一个进程的变量和数据结构,如果想让一个进程访问另一个进
程的资源,需要使用进程间通信,比如管道,文件,套接字等。
总结:
程序是二进制的文件、是静态的。
进程是程序运行的过程,动态,有生命周期机运行状态。
1.3 线程
线程包含在进程之中,是进程中实际的运作单位,也是操作系统能够独立运行的基本单位,也称作
轻量进程。一个进程中可以并发多个线程,每一条线程可以并执行不同的任务,而我们在任务管理
器看到的一个个进程则由我们下载的应用程序所产生的。当然一个应用程序也可以包含多个进程。
程序、进程、线程关系:
线程包含在进程之中,是进程中实际运行的单位,也是操作系统中能够独立运行的基本单位,也称
作轻量进程,一个进程中可以并发多个线程,每条线程可以并行执行不同的任务,而我们在任务管
理器中看到的一个个进程则由我们下载的应用程序所产生的,当然一个应用程序也可以包含多个进
程。
二、查看进程信息的命令
2.1 ps命令
查看静态的进程信息
2.1.1 格式
ps -aux
2.1.2 常用的参数
-a:显示当前终端下的所有进程信息,包括其他用户的进程。与"x"选项结合时将显示系统中所有的
进程信息。
-u:使用以用户为主的格式输出进程信息。
-x:显示当前用户在所有终端下的进程信息。
2.1.3 常用的选项组合:
ps -aux #将以简单列表的形式显示出进程信息
多数情况下是下图这样使用的:
各列的解释:
名词 | 解释 |
USER | 进程的用户 |
PID | 远程的ID |
%CPU | 远程占用的CPU百分比 |
%MEN | 占用内存的百分比 |
VSZ | 该进程使用的虚拟内存量 |
RSS | 该进程使用的物理内存量 |
TTY | 表明该进程在哪个终端上运行;若不是从终端启动的进程则显示为?(简说:pts是远程登录终端 Ctrl+Alt F1-F6 tty1 图像界面 2和6字符界面 ? 系统本身自身执行的进程) |
STAT | 该行程的状态(D:不可中断的休眠状态;R:正在运行状态;S:处于休眠状态,可被唤醒;T:停止状态,可能是在后台暂停或进程处于跟踪调试状态;Z:僵尸进程,进程已经中止,但是部分程序还在内存中) |
START | 该进程触发启动的时间 |
TIME | 该进程实际使用cpu运行时间 |
COMMAND | 启动该进程的命令的名称 |
案例:查看进程状态 vim a.txt 在另一个终端执行
在 vim a.txt 这个终端上 按下: ctrl+z [1]+ 已停止:vim a.txt 在另一个终端执行:
如果在程序停止的时候删除a.txt 文件,还得把它的隐藏文件删除,如下图所示
注:
ctrl+c 是发送 SIGINT 信号,终止一个进程
ctrl+z 是发送 SIGSTOP 信号,挂起一个进程。将作业放置到后台(暂停)
ctrl+d 不是发送信号,而是表示一个特殊的二进制值,表示 EOF。代表输入完成或者注销
2.2 查看进程的统计信息
2.2.1 格式
ps -elf
2.2.2 参数
-e:显示系统内的所有进程信息
-1:使用长格式显示进程信息
-f:使用完整的格式显示进程信息
各列的解释:
F | 内核分配给进程的系统标记 |
S | 进程的状态 |
UID | 启动这些进程的用户 |
PID | 进程的进程id |
PPID | 父进程的进程号(如果该进程是由另一个进程启动的) |
C | 进程的生命周期的CPU利用率 |
PRI | 进程的优先级(越大的数字代表越低的优先级) |
NI | 谦让度值用来参与决定优先级 |
ADDR | 进程的内存地址 |
SZ | 假如进程被换出,所需交换空间的大致大小 |
WCHAN | 若该进程在睡眠,则显示睡眠中的系统函数名 |
STIME | 进程启动时的系统时间 |
TTY | 进程启动时的终端设备。 pts/0255代表虚拟终端,一般是远程连接的终端;tty1tty7 代表本地控制台终端 |
TIME | 运行进程需要的累计CPU时间 |
CMD | 进程的启动命令 |
2.2.3 僵尸进程
一个进程结束了,但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程,因为
每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程,看有没有哪个进程是刚刚结束
的这个进程的子进程,如果是的话,就由init来接管它,成为它的父进程,子进程退出后init会回收
其占用的相关资源。但是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用
的资源,此时子进程将成为一个僵尸进程。
2.2.4 常见的状态
-D: 不可被唤醒的睡眠状态,通常用于I/O情况。
-R: 该进程正在运行
-S: 该进程处于睡眠状态,可被唤醒
-T: 停止状态,可能是在后台暂停或进程处于除错状态
-W: 内存交互状态(从2.6内核开始无效)
-X: 死掉的进程(应该不会出现)
-Z: 僵尸进程。进程已经中止,但是部分程序还在内存当中
-<: 高优先级(以下状态在BSD 格式中出现)
-N: 低优先级
-L: 被锁入内存
-s: 包含子进程
-l: 多线程(小写L)
-+: 位于后台
-c: 进程占用cpu的百分比
2.3 查看进程的动态信息
2.3.1 格式
top
2.3.2 各行参数解释
上图的输出信息中,开头的部分显示了系统任务、CPU占用、内存占用、减缓空间等汇总信息,汇
总信息下方依次显示当前进程的排名情况。相关信息的含义表述如下:
第一行的 任务队列信息 top: uptime16:10:17 当前时间; 3 users 当前登录用户数
load average: 0.00, 0.01, 0.05 系统负载,即任务队列的平均长度。 三个数值分别为 1 分钟、5 分
钟、15 分钟前到现在的平均值。
第二行系统任务(Tasks)信息:total,总进程数;running,正在运行的进程数;sleeping, 休眠
的进程数;stopped,中止的进程数;zombie,僵死无响应的进程数。
第三行%CPU占用信息:us,用户占用;sy,内核占用;ni,优先级调度占用;id,空闲CPU;
wa,I/O 等待占用;hi,硬件中断占用;si,软件中断占用;st,虚拟化占用。要了解空闲的 CPU
百分比,主要看%id 部分。
第四行内存占用(Mem)信息:total,总内存空间;free,空闲内存(空闲内存如果为0则代表有
进程占用了大量cpu);used,已用内存;buff/cache,物理内存和交换内存的缓冲区总和。
第五行交换空间(Swap)占用:total,总交换空间;free,空闲交换空间;used,已用交换间;
avail Mem,可用物理空间。
第六行进程信息区解释:PID:进程ID;USER:进程所有的用户名;PR:优先级;NI:谦让度
值,负值表示高优先级,正值表示低优先级;VIRT:进程使用的虚拟内存总量,单位KB;RES:
进程使用的物理内存大小,单位K;SHR:共享内存大小,单位KB;S:进程状态(D=不可中断的
随眠状态;R=运行中或可运行;S=睡眠中;T=已停止;Z=僵停);%CPU上次更新到现在的CPU
时间占用百分比;%MEN:进程使用的物理内存百分比;TIME+:进程使用的CPU时间总计,单
位1/100秒;COMMAND:命令名/命令行
2.3.3 top操作界面的快捷键
默认 3s 刷新一次,按 s 修改刷新时间按空格 :立即刷新。
P:按 CPU 排序
M:按内存排序
T:按时间排序
p: 进程 IP,查看某个进程状态(有问题)
N 键根据启动时间进行排序
数字键 1:显示每个内核的 CPU 使用率u/U:指定显示的用户
h:可以获得 top 程序的在线帮助信息
q:键可以正常地退出 top 程序
注:若通过 top 排名工具发现某个进程 CPU 占用率非常高,需要终止该进程的运行,可以在 top
操作界面中按 k 键,然后在列表上方将会出现“PID to signal/kill [default pid = 3180]:” 的提示信
息,根据提示输入指定进程的 PID 号并按 Enter 键, 出现“Send pid 5597 signal [15/sigterm]”的二
次确认的提示信息,然后按Enter 键确认即可终止对应的进程。
2.4 查看进程信息 pgrep命令
根据特定的条件查询进程的PID
2.4.1 格式
pgrep
2.4.2 常用的参数
-l | 选项可同时输出对应的进程名以及PID号 |
-U | 指定特定用户的进程 |
-t | 选项可查询在特定终端运行的进程 |
案例:
2.5 以树形结构列出进程信息 pstree命令
2.5.1 格式
pstree -aup
2.5.2 常用参数
p | 选项使用时可以同时列出对应的PID号 |
u | 选项可以列出对应的用户名 |
a | 选项可以理出完整的命令信息 |
案例:执行如下的命令:pstree -aup 可以查看当前系统的进程树,包括各进程对应的PID号,用户名,完整命名等信息。从输出结果中可以看出,systemctl 进程确实是Linux 操作系统中所有进程的“始祖”。
三、进程的启动方式
3.1 手工启动
由用户手工输入命令或着可执行程序的路径,可以至少启动一个进程。根据该进程是否需要占用当
前的命令终端,手工启动又分为前台启动和后台启动。
前台启动:用户输入命令,直接执行程序
后台启动:在命令行尾加入“&”符号
3.2 调度启动
在服务器维护工作中,经常需要执行一些比较费时而且较占用资源的任务(如数据备份),这些任
务更合适在相对空闲的时候进行。这时就需要用户事先进行调度安排,指定任务运行的时间,当系
统到达设定的时间时会自动启动并完成指定的任务。调度启动计划任务均在后台运行,不会占用用
户的命令终端。
使用at命令,设置一次性计划任务
使用crontab命令,设置周期性计划任务
3.3 进程的前后台调度
3.3.1 Ctrl +Z 组合键
将当前就能成挂起,及调入后台并停止执行
3.3.2 jobs命令
查看处于后台的任务列表
3.3.3 fg命令
将后台进程恢复到前台运行,可指定任务序号
案例:
3.3.4 扩展dg命令
将后台的进程恢复运行
使用 bg(BackGround,后台)命令,可以将后台中暂停执行(如按 Ctrl+Z 组合键挂起)的任务
恢复运行,继续在后台执行操作;
使用 fg 命令(ForeGround,前台),可以将后台任务重新恢复到前台运行。
除非后台中的任务只有一个,否则 bg 和 fg 命令都需要指定后台进程的任务编号作为参数。例如,
执行如下的“fg 1”命令可以将之前挂起至后台的 wget 进程重新调入前台执行。
3.4 终止进程的运行
3.4.1 Ctrl+C 组合键
中断正在执行的命令
3.4.2 kill 命令 和 killall 命令
kill用于终止指定PID号的进程
killall用于终止指定名称的所有进程
-9 选项用于强制终止
案例:
3.5 终止进程的运行 pkill 命令
根据特定的条件终止相应的进程
3.5.1 常用参数
-U: 根据进程所属的用户名终止相应的进程
-t: 根据进程所在的终端终止相应的进程
pkill 命令可以根据进程的名称、运行该进程的用户、进程所在的终端等多种属性终止特定的进
程,大部分选项与 pgrep 命令基本类似,如“-U”(指定用户)、“-t”(指定终端) 等选项,使用
起来非常方便。
案例:
创建lisi 用户,进入lisi 用户里用vim编辑一个文件,再用pkill 删除lisi用户的进程,再查看状态
四、计划任务管理命令
4.1 一次性任务管理at 命令
4.1.1 格式
at [HH:MM] [yyyy-mm-dd]
对于已经设置但还未执行的计划任务,可以通过 atq 命令查看,若要删除指定的编号的 at 任务,可以使用atrm 命令。
案例:
4.2 周期性计划任务命令 crontab
4.2.1 crontab 命令
按照预先设置的时间周期(分钟、小时、天…)重复执行用户指定的命令操作
属于周期性计划任务
主要设置文件:
全局配置文件,位于文件:/etc/crontab
系统默认的设置,位于目录:/etc/cron.*/
用户定义的设置,位于文件:/var/spool/cron/用户名
4.2.2 管理crontab计划任务
参数:
-e | 编辑计划任务列表 |
-u | 指定所管理的计划任务属于哪个用户,默认是针对当前用户,一般只有root用户有权限使用此选项(用于编辑,删除其他用户的计划任务) |
-l | 列表显示计划任务 |
-r | 删除计划任务列表 |
crontab -u 用户名 #指定XX用户的cron服务
crontab -l #列出当前用户下的cron的详细内容
crontab -u zx -l #列出zx用户下的cron的详细内容
crontab -r #删除所有用户的cron内容,普通用户执行,只删除自己的cron内容
crontab -r -u zx #删除zx用户的cron内容
crontab -e #编辑cron服务
4.2.3 编辑计划任务
crontab -e 【-u 用户名】 -u缺省时默认当前用户
4.2.4 查看计划任务
crontab -l 【-u 用户名】
4.2.3 删除计划任务
crontab -r 【-u 用户名】
4.3 crontab 任务的配置格式
50 3 2 1 * run_command 分钟 小时 日期 月份 星期 命令 |
字段 | 说明 |
分钟 | 取值为 0~59 的任意整数 |
小时 | 取值为 0~23 的任意整数 |
日期 | 取值为 1~31 的任意整数(日期在该月份中必须有效) |
月份 | 取值为 1~12 的任意整数 |
星期 | 取值为 0~7 的任意整数,0 或 7 代表星期日 |
命令 | 要执行的命令或程序脚本 |
4.4 时间数值的特殊表示方法
* 表示该范围内的任意时间
, 表示间隔的多个不连续时间点
- 表示一个连续的时间范围
/ 表示间隔的时间频率
应用示例:
0 17 * * 1-5 周一到周五每天17点
30 8 * * 1,3,5 周一,周三,周五8.30
0 8-18/2 * * * 8点到18点每两小时
0 * */3 * * 每三天
扩展:
5 * * * * ls 指定每小时的第5分钟执行一次ls命令
30 5 * * * ls 指定每天的 5:30 执行ls命令
30 7 8 * * ls 指定每月8号的7:30分执行ls命令
30 5 8 6 * ls 指定每年的6月8日5:30执行ls命令
30 6 * * 0 ls 指定每星期日的6:30执行ls命令[注:0表示星期天,1表示星期1,以此类推,也可以用英文来表示,sun表示星期天,mon表示星期一等。]
30 3 10,20 * * ls 每月10号及20号的3:30执行ls命令[注:“,”用来连接多个不连续的时段]
25 8-11 * * * ls 每天8-11点的第25分钟执行ls命令[注:“-”用来连接连续的时段]
*/15 * * * * ls 每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令 ]
30 6 */10 * * ls 每个月中,每隔10天6:30执行一次ls命令[即每月的1、11、21、31日是的6:30执行一次ls命令。 ]
案例:
五、总结:
1. 查看进程的命令: ps、top、pgrep、pstree
2. 进程控制包括:启动进程、调度进程、终止进程
3.命令 jobs , fg , kill , killall ,pkill 的用法
4. 快捷键:Ctrl+C , Ctrl+Z , Ctrl+D 的用法
5. at命令设置计划任务
6. crontab计划任务的配置