目录
一、程序和进程
1.程序
程序:执行特定任务的一串代码
(1)是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息 化工具
(2)用于描述进程要完成的功能,是控制进程执行的指令集
2.进程
进程:运行中的程序的一个副本,是被载入内存的一个指令集合,是资源分配的单位
(1)进程ID(ProcessID,PID)号码被用来标记各个进程
(2)UID、GID语境决定对文件系统的存取和访问权限,通常从执行进程的用户来继承
(3)存在生命周期
(4)都由其父进程创建
2.1进程具有的特点
动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的
并发性:任何进程都可以同其他进程一起并发执行
独立性:进程是系统进行资源分配和调度的一个独立单位(硬件资源分配的最小单位)
结构性:进程由程序(代码)、数据(需要调用的文件)和进程控制块(开发)三部分组成
二、查看进程的相关命令
进程的管理主要是指进程的关闭与重启。我们一般关闭或重启软件,都是关闭或重启它的程序,而不是直接操作进程的系统中可以识别的信号较多,我们可以使用命令 "kill -l" 或 "man 7 signal" 来查询
信号代号 | 信号名称 | 说明 |
1 | SIGHUP | 该信号让进程立即关闭,然后重新读取配置文件之后重启 |
2 | SIGINT | 程序中止信号,用于中止前台进程。相当于输出 Ctrl+C快捷键 |
3 | SIQUIT | 退出 |
8 | SIGFPE | 在发生致命的算术运算错误时发出。不仅包括浮点运算错误,还包括溢出及除数为0等其他所有的算术运算错误 |
9 | SIGKILL | 用来立即结束程序的运行。本信号不能被阻塞、处理和忽略。一般用于强制中止进程 |
14 | SIGALRM | 时钟定时信号,计算的是实际的时间或时钟时间。alarm函数使用该信号 |
15 | SIGTERM | 正常结束进程的信号,kill命令的默认信号。如果进程已经发生了问题,那么这个信号是无法正常中止进程的,这时我们才会尝试SIGKILL信号,也就是信号9 |
18 | SIGCONT | 该信号可以让暂停的进程恢复执行。本信号不能被阻断 |
19 | SIGSTOP | 该信号可以暂停前台进程,相当于输入 Ctrl+Z快捷键。本信号不能被阻断 |
1.ps命令
1.1概念
ps 即 process state ,可以查看进程当前状态的快照,默认显示当前终端中的进程, Linux 系统各进程的相关信息均保存在/proc/ 数字 /status 下的文件中
1.2查看静态的进程统计信息
"ps aux": 可以查看系统中所有的进程"ps -le": 可以查看系统中所有的进程,而且还能看到进程的父进程的 PID 和进程优先级"ps -l": 只能看到当前 Shell 产生的进程
常用选项:ps -aux
-a |
显示当前终端下的所有进程信息,包括其他用户的进程。与
“x”
选项结合时将示系统中所有的进程信息
|
-u |
使用以用户为主的格式输出进程信息
|
-x |
显示当前用户在所有终端下的进程信息
|
-e |
显示系统内的所有进程信息
|
-l |
使用长(
Long)
格式显示进程信息
|
-f |
使用完整的(
Full)
格式显示进程信
|
选项 | 含义 |
USER | 启动该进程的用户账号的名称 |
PID | 该进程在系统中的数字ID号,在当前系统中是唯一的 |
%CPU | 该进程占用CPU资源的百分比,占用的百分比越高,进程越耗费资源 |
%MEM | 该进程占用物理内存的百分比,占用的百分比越高,进程越耗费资源 |
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 | 产生此进程的命令名 |
ps -elf 命令
选项 | 含义 |
F | 进程标志,说明进程的权限,常见的标志有两个:1:进程可以被复制,但是不能被执行;4:进程使用超级用户权限 |
S | 进程状态。具体的状态和"psaux"命令中的 STAT 状态一致 |
UID | 运行此进程的用户的ID |
PID | 进程的ID |
PPID | 父进程的ID |
C | 该进程的CPU使用率,单位是百分比 |
PRI | 进程的优先级,数值越小,该进程的优先级越高,越早被CPU执行;系统定义不可以人为修改 |
NI | 进程的优先级,数值越小,该进程越早被执行;可以人为修改-20-19 |
ADDR | 该进程在内存的哪个位置 |
SZ | 该进程占用多大内存 |
WCHAN | 该进程是否运行。“-”代表正在运行 |
TTY | 该进程由哪个终端产生 |
TIME | 该进程占用 CPU 的运算时间,注意不是系统时间 |
CMD | 产生此进程的命令名 |
2.top命令
ps命令可以一次性给出当前系统中进程状态,但使用此方式得到的信息缺乏时效性,并且如果管理员需要实时监控进程运行情况,就必须不停地执行ps命令,这显然是缺乏效率的。
为此,Linux提供了top命令。top命令可以动态地持续监听进程地运行状态,与此同时,该命令还提供了一个交互界面,用户可以根据需要,人性化地定制自己的输出,进而更清楚地了进程的运行状态
选项 | 功能 |
-d | 秒数:指定top命令每隔几秒更新。默认是3秒 |
-b | 使用批处理模式输出。一般和"-n"选项合用,用于把top命令重定向到文件中 |
-n | 次数:指定top命令执行的次数。一般和“-”选项合用 |
-p | 进程PID:仅查看指定ID的进程 |
-s | 使top命令在安全模式中运行,避免在交互模式中出现错误 |
-u | 用户名:只监听某个用户的进程 |
在top命令的显示窗口中,还可以使用如下按键,进行一下交互操作
?或h | 显示交互模式的帮助 |
c | 按照CPU的使用率排序,默认就是此选项 |
m | 按照内存的使用率排序 |
N | 按照PID排序 |
T | 按照CPU的累积运算时间排序,也就是按照TIME+项排序 |
k | 按照PID给予某个进程一个信号。一般用于中止某个进程,信号9是强制中止的信号 |
r | 按照PID给某个进程重设优先级(Nice)值 |
q | 退出top命令 |
挑选其中几个命令演示如下:
图一为按照PID排序
图二为按照运行时间排序
2.1top命令第二部分输出
主要是系统进程信息,各个字段的含义如下:
PID | 进程的ID |
USER | 该进程所属的用户 |
PR | 优先级,数值越小优先级越高 |
NI | 优先级,数值越小优先级越高 |
VIRT | 该进程使用的虚拟内存的大小,单位为 KB |
RES | 该进程使用的物理内存的大小,单位为 KB |
SHR | 共享内存大小,单位为 KB |
S | 进程状态 |
%CPU | 该进程占用CPU的百分比 |
%MEM | 该进程占用内存的百分比 |
TIME+ | 该进程共占用的CPU时间 |
COMMAND | 进程的命令名 |
3.pgrep命令
查看指定的进程
pgrep - [选项] “文件名”
-U | 指定用户,小u也可以 |
-l | 显示进程名 |
-a | 显示完整格式的进程名 |
-P pid | 显示指定进程的子进程 |
4.pstree命令
以树形结构列出进程信息
pstree [OPTION] [ PID] [USER ]
常用选项:
-a | 显示启动每个进程对应的完整指令,包括启动进程的路径、参数等 |
-p | 显示PID |
-T | 不显示线程thread,默认显示线程 |
-u | 显示用户切换 |
-H pid | 高亮显示指定进程及其前辈进程 |
三、进程管理
1.手动启动
前台启动:通过终端启动,且启动后一直占据终端
后台启动:可通过终端启动,但启动后即转入后台运行(释放终端)
1.1“命令&”,把命令放入后台执行
让作业运行于后台
(1)运行中的作业:Ctrl+z 放到后台但是会停止作业
(2)尚未启动的作业:COMMAND &
第一种把命令放入后台的方法是在命令后面加入 空格 &。使用这种方法放入后台的命令,在后台处于执行状态
注意,放入后台执行的命令不能与前台有交互,否则这个命令是不能在后台执行的
2.jobs命令(查看后台任务列表)
常用的参数
-l:选项可以同时显示该进程对应的PID号
bg(BackGround,后台)命令:可以将后台中暂停执行(如按 Ctrl+Z 组合键挂起)的任务恢复运行,继续在后台执行操作
fg (ForeGround,前台)命令:可以将后台任务重新恢复到前台运行。除非后台中的任务只有一个,否则bg和fg命令都需要指定后台进程的任务编号作为参数
3.kill命令(结束进程)
通过kill命令终止进程时,需要使用进程的PID号作为参数。无特定选项时,kill命令将给该进程发送终止信号并正常退出运行,若该进程已经无法响应终止信号,则可以结合“-9” 选项强行终止进程。强制终止进程时可能会导致程序运行的部分数据丢失,因此不到不得已时不要轻易使用“-9”选项
也就是说,kill命令的执行原理是这样的,kill命令会向操作系统内核发送一个信号(多是终止信号)和目标进程的PID,然后系统内核根据收到的信号类型,对指定进程进行相应的操作
kill [信号] PID
kill命令是按照PID来确定进程的,所以kill命令只能识别PID,而不能识别进程名。Linux 定义了几十种不同类型的信号,可以使用kill-l 命令査看所有信号及其编号,这里仅列出几个常用的信号
信号编号 | 信号名 | 含义 |
0 | EXIT | 程序退出时收到该信息 |
1 | HUP | 终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化 |
2 | INT | 表示结束进程,但并不是强制性的,常用的"Ctrl+C" 组合键发出就是一个kill -2 的信号 |
3 | QUIT | 退出 |
9 | KILL | 杀死进程,即强制结束进程 |
11 | SEGV | 段错误 |
15 | TERM | 正常结束进程,是kill命令的默认信号 |
4.killall命令
killall也是用于关闭进程的一个命令,但和kill不同的是,killall命令不再依靠PID来杀死单个进程,而是通过程序的进程名来杀死一类进程,也正是由于这一点,该命令常与 ps、pstree 等命令配合使用
killall [选项] [信号] 进程名
-i:交互式,询问是否要杀死某个进程
-l:忽略进程名的大小写
5.pkill命令
当作于管理进程时,pkill命令和killall命令的用法相同,都是通过进程名杀死一类进程,该命令的基本格式如下:
pkill [信号] 进程名
信号编号 | 信号名 | 含义 |
0 | EXIT | 程序退出时收到该信息,检查检查是否有故障 |
1 | HUP | 终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化 |
2 | INT | 表示结束进程,但并不是强制性的,常用的"Ctrl+C" 组合键发出就是一个kill -2 的信号 |
3 | QUIT | 退出 |
9 | KILL | 杀死进程,即强制结束进程 |
11 | SEGV | 段错误 |
15 | TERM | 正常结束进程,是kill命令的默认信号 |
pkill [-t 终端号] 进程名
-U:根据进程所属的用户名终止相应进程
-t:根据进程所在的终端终止相应进程使用 pkill 命令可以根据进程的名称、运行该进程的用户、进程所在的终端等多种属性终止特定的进程,大部分选项与 pgrep 命令基本类似,如“-U”(指定用户)、“-t”(指定终端) 等选项,使用起来非常方便
四、计划任务管理
1.at命令
使用at命令设置的计划任务只在指定的时间点执行一次,前提是对应的系统服务atd必须已经运行。需要注意的是,计划执行任务的时间、日期必须安排在当前系统的时刻之后,否则将无法正确设置计划任务
at [时间]
at>给出什么操作
Ctrl+D 提交命令
atq
查看已经设置但还未执行的计划任务,已执行过的at任务将不会再出现在列表中
atrm [编号]
删除指定编号的at任务,删除后的at任务将不会被执行,已经执行过的任务无法删除
2. crontab命令
crontab命令
按照预先设置的时间周期(分钟、小时、天......)重复执行用户指定的命令操作
属于周期性计划任务
主要设置文件
全局配置文件,位于文件:/etc/crontab
系统默认的设置,位于目录:/etc/cron.*/
用户定义的设置,位于文件:/ar/spool/cron/用户名
crond通过多个目录和文件设置计划任务,不同类型的任务由不同的配置文件来设置
选项 | 功能 |
-u | 用来设定某个用户的crontab服务,例如"-u demo"表示设备demo用户的crontab服务,此选项一般有root用户来运行 |
-e | 编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件 |
-l | 显示某用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容 |
-r | 从 /var/spool/cron 删除某用户的crontab文件,如果不指定用户,则默认删除当前用户的 crontab文件 |
-i | 在删除用户的crontab文件时,给确认提示 |
crontab -e
进入crontab编辑界面。会打开vim编辑你的任务
* * * * *执行的任务
项目 | 含义 | 范围 |
第一个“*” | 分钟 | 0-59 |
第二个“*” | 小时 | 0-23 |
第三个“*” | 日期 | 1-31 |
第四个“*” | 月份 | 1-12 |
第五个“*” | 星期 | 0-7(0和7都代表星期日) |
特殊符号
特殊符号 | 含义 |
*(星号) | 代表任何时间。比如第一个"*"就代表一小时种每分钟都执行一次的意思 |
,(逗号) | 代表不连续的时间。比如"0 8,12,16***命令"就代表在每天的8点0分、12点0 分、16点0分都执行一次命令 |
-(中杠) | 代表连续的时间范围。比如"05 **1-6命令",代表在周一到周六的凌晨5点0分执行 命令 |
/(正斜杠) | 代表每隔多久执行一次。比如"*/10命令",代表每隔 10 分钟就执行一次命令 |
管理crontab计划任务
编辑计划任务
crontab -e [-u 用户名]
查看计划任务
crontab -l [-u 用户名]
删除计划任务
crontab -r [-u 用户名]