进程和计划任务管理
进程和计划任务管理
进程和计划任务
内核功能:进程管理、内存管理、文件系统、网络功能、驱动程序、安全功能等。
程序
什么是程序?
- 是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具
- 用于描述进程要完成的功能,是控制进程执行的指令集
- 保存在硬盘、关盘等介质中的可执行代码和数据
- 静态保存的代码
进程
什么是进程?
运行中的程序的一个副本,是被载入内存的一个指令集合,是资源分配的单位
- 进程ID(Process ID,PID)号码被用来标记各个进程
- UID、GID、和SELinux语境决定对文件系统的存取和访问权限
- 通常从执行进程的用户来继承
- 存在生命周期
- 都由其父进程创建
- 在CPU及内存中运行的程序代码
- 动态执行的代码
- 父、子进程(每个程序可以创建一个或多个进程)
进程具有的特性
动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的;
并发性:任何进程都可以同其他进程一起并发执行;
独立性:进程是系统进行资源分配和调度的一个独立单位
结构性:进程由程序、数据和进程控制块三部分组成。
僵尸进程
什么是僵尸进程?
“僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。如果父进程先退出 ,子进程被init接管,子进程退出后init会回收其占用的相关资源”
线程
什么是线程?
线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
进程管理相关命令
进程的管理主要是指进程的关闭与重启。我们一般关闭或重启软件,都是关闭或重启它的程序,而不是直接操作进程的。比如,要重启 apache 服务,一般使用命令"service httpd restart"重启 apache的程序。systemctl httpd start
那么,可以通过直接管理进程来关闭或重启 apache 吗?答案是肯定的,这时就要依赖进程的信号(Signal)了。我们需要给予该进程 信号,告诉进程我们想要让它做什么。
系统中可以识别的信号较多,我们可以使用命令"kill -l"或"man 7 signal"来查询
号代号 | 信号名称 | 说 明 |
---|---|---|
1 | SIGHUP | 该信号让进程立即关闭.然后重新读取配置文件之后重启 |
2 | SIGINT | 程序中止信号,用于中止前台进程。相当于输出 Ctrl+C 快捷键 |
3 | SIGQUIT | 退出 |
8 | SIGFPE | 在发生致命的算术运算错误时发出。不仅包括浮点运算错误,还包括溢出及除数为 0 等其他所有的算术运算错误 |
9 | SIGKILL | 用来立即结束程序的运行。本信号不能被阻塞、处理和忽略。般用于强制中止进程 |
14 | SIGALRM | 时钟定时信号,计算的是实际的时间或时钟时间。alarm 函数使用该信号 |
15 | SIGTERM | 正常结束进程的信号,kill 命令的默认信号。如果进程已经发生了问题,那么这 个信号是无法正常中止进程的,这时我们才会尝试 SIGKILL 信号,也就是信号 9 |
18 | SIGCONT | 该信号可以让暂停的进程恢复执行。本信号不能被阻断 |
19 | SIGSTOP | 该信号可以暂停前台进程,相当于输入 Ctrl+Z 快捷键。本信号不能被阻断 |
ps命令
ps 即 process state,可以进程当前状态的快照,默认显示当前终端中的进程,Linux系统各进程的相关信息均保存在/proc/数字 目录下的各文件中查看静态的进程统计信息
常用选项:
选项 | 功能 |
---|---|
a | 显示当前终端下的所有进程信息,包括其他用户的进程。 |
u | 使用以用户为主的格式输出进程信息。 |
x | 显示当前用户在所有终端下的进程信息。 |
-e | 显示系统内的所有进程信息。 |
-l | 使用长(Long)格式显示进程信息 |
-f | 使用完整的(Full)格式显示进程信 |
当选项a与x选项结合时将显示系统中所有的进程信息。
[root@localhost ~]# ps aux | head -2 #显示系统中前两行进程信息
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 128164 6900 ? Ss 14:52 0:01 /usr/lib/systemd/s
表头 | 含义 |
---|---|
USER | 该进程是由哪个用户产生的。 |
PID | 进程的 ID。 |
%CPU | 该进程占用 CPU 资源的百分比 |
%MEM | 该进程占用物理内存的百分比 |
VSZ | 该进程占用虚拟内存的大小,单位为 KB。 |
RSS | 该进程占用实际物理内存的大小,单位为 KB。 |
TTY | 该进程是在哪个终端运行的。 |
STAT | 进程状态。 |
START | 该进程的启动时间。 |
TIME | 该进程占用 CPU 的运算时间,注意不是系统时间。 |
COMMAND | 产生此进程的命令名。 |
STAT进程状态。常见的状态有以下几种: -D:不可被唤醒的睡眠状态,通常用于 I/O 情况
-R:该进程正在运行。
-S:该进程处于睡眠状态,可被唤醒。
-T:停止状态,可能是在后台暂停或进程处于除错状态。
-W:内存交互状态(从 2.6 内核开始无效)。
-X:死掉的进程(应该不会出现)。
-Z:僵尸进程。进程已经中止,但是还是占用硬件资源。
-<:高优先级(以下状态在 BSD 格式中出现)。
-N:低优先级。
-L:被锁入内存。
-s:包含子进程。
-l:多线程(小写 L)。
-+:位于后台。
ps -le可以查看系统中所有的进程,而且还能看到进程的父进程的 PID 和进程优先级;
[root@localhost ~]# ps -le |head -2
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 1 0 1 80 0 - 32041 ep_pol ? 00:00:00 systemd
表头 | 含义 |
---|---|
F | 进程标志,说明进程的权限,常见的标志有两个: 1:进程可以被复制,但是不能被执行;4:进程使用超级用户权限; |
S | 进程状态。具体的状态和"psaux"命令中的 STAT 状态一致; |
UID | 运行此进程的用户的 ID; |
PID | 进程的 ID; |
PPID | 父进程的 ID; |
C | 该进程的 CPU 使用率,单位是百分比; |
PRI | 进程的优先级,数值越小,该进程的优先级越高,越早被 CPU 执行;系统定义不可以人为修改 |
NI | 进程的优先级,数值越小,该进程越早被执行;可以人为修改 |
ADDR | 该进程在内存的哪个位置; |
SZ | 该进程占用多大内存; |
WCHAN | 该进程是否运行。"-"代表正在运行; |
TTY | 该进程由哪个终端产生; |
TIME | 该进程占用 CPU 的运算时间,注意不是系统时间; |
CMD | 产生此进程的命令名; |
只想查看一下当前登录的进程ps -l
[root@localhost ~]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 1326 1154 0 80 0 - 29144 do_wai pts/1 00:00:00 bash
0 R 0 1905 1326 0 80 0 - 37235 - pts/1 00:00:00 ps
top命令
ps 命令可以一次性给出当前系统中进程状态,但使用此方式得到的信息缺乏时效性,并且,如果管理员需要实时监控进程运行情况,就必须不停地执行 ps 命令,这显然是缺乏效率的。
为此,Linux 提供了 top 命令。top 命令可以动态地持续监听进程地运行状态,与此同时,该命令还提供了一个交互界面,用户可以根据需要,人性化地定制自己的输出,进而更清楚地了进程的运行状态。
选项 | 功能 |
---|---|
-d | 指定 top 命令每隔几秒更新。默认是 3 秒 |
-b | 一般和"-n"选项合用,用于把 top 命令重定向到文件中; |
-n | 指定 top 命令执行的次数。一般和"-"选项合用; |
-p | 仅查看指定 ID 的进程; |
-s | 使 top 命令在安全模式中运行,避免在交互模式中出现错误; |
-u | 用户名:只监听某个用户的进程; |
在 top 命令的显示窗口中,还可以使用如下按键,进行一下交互操作:
输入 | 功能 |
---|---|
? 或 h | 显示交互模式的帮助; |
c | 按照 CPU 的使用率排序,默认就是此选项; |
M | 按照内存的使用率排序; |
N | 按照 PID 排序; |
T | 按照 CPU 的累积运算时间排序,也就是按照 TIME+ 项排序; |
k | 按照 PID 给予某个进程一个信号。一般用于中止某个进程,信号 9 是强制中止的信号; |
r | 按照 PID 给某个进程重设优先级(Nice)值; |
q | 退出 top 命令; |
在 top 命令的显示窗口中输入M按照内存的使用率排序
第一行为任务队列信息,具体内容如表 所示。
内 容 | 说 明 |
---|---|
19.48.53 | 系统当前时间 |
up 27min | 系统的运行时间.本机己经运行27分钟 |
1 users | 当前登录了一个用户 |
load average: 0.00,0.01,0.03 | 系统在之前 1 分钟、5 分钟、15 分钟的平均负载。如果 CPU 是单核的,则这个数值超过 1 就是高负载:如果 CPU 是四核的,则这个数值超过 4 就是高负载 (这个平均负载完全是依据个人经验来进行判断的,一般认为不应该超过服务器 CPU 的核数) |
第二行为进程信息,具体内容如表
内 容 | 说 明 |
---|---|
Tasks: 138 total | 系统中的进程总数 |
1 running | 正在运行的进程数 |
137 sleeping | 睡眠的进程数 |
0 stopped | 正在停止的进程数 |
0 zombie | 僵尸进程数。如果不是 0,则需要手工检查僵尸进程 |
第三行为 CPU 信息,具体内容如表
内 容 | 说 明 |
---|---|
Cpu(s): 0.0 %us | 用户模式占用的 CPU 百分比 |
0.0%sy | 系统模式占用的 CPU 百分比 |
0.0%ni | 改变过优先级的用户进程占用的 CPU 百分比 |
100%id | 空闲 CPU 占用的 CPU 百分比 |
0.0%wa | 等待输入/输出的进程占用的 CPU 百分比 |
0.0%hi | 硬中断请求服务占用的 CPU 百分比 |
0.0%si | 软中断请求服务占用的 CPU 百分比 |
0.0%st | st(steal time)意为虚拟时间百分比,就是当有虚拟机时,虚拟 CPU 等待实际 CPU 的时间百分比 |
第四行为物理内存信息,具体内容如表buff cache
内 容 | 说 明 |
---|---|
Mem: 2014476 total | 物理内存的总量,单位为KB |
571504k used | 己经使用的物理内存数量 |
1340384free | 空闲的物理内存数量。我们使用的是虚拟机,共分配了 628MB内存,所以只有53MB的空闲内存 |
385068buff/cache | 作为缓冲的内存数量 |
第五行为交换分区(swap)信息,如表
内 容 | 说 明 |
---|---|
Swap: 4194300 total | 交换分区(虚拟内存)的总大小 |
0 used | 已经使用的交换分区的大小 |
524280k free | 空闲交换分区的大小 |
1522152 avail Mem | 作为缓存的交换分区的大小 |
top 命令的第二部分输出,主要是系统进程信息,各个字段的含义如下:
PID | 进程的 ID |
---|---|
USER | 该进程所属的用户 |
PR | 优先级,数值越小优先级越高 |
NI | 优先级,数值越小、优先级越高 |
VIRT | 该进程使用的虚拟内存的大小,单位为 KB |
RES | 该进程使用的物理内存的大小,单位为 KB |
SHR | 共享内存大小,单位为 KB |
S | 进程状态 |
%CPU | 该进程占用 CPU 的百分比 |
%MEM | 该进程占用内存的百分比 |
TIME+ | 该进程共占用的 CPU 时间 |
COMMAND | 进程的命令名 |
pgrep命令
查看指定的进程
-U 指定用户
-l: 显示进程名
-a: 显示完整格式的进程名
-P pid: 显示指定进程的子进程
psteer命令
以树形结构列出进程信息
常用选项
-a 显示启动每个进程对应的完整指令,包括启动进程的路径、参数等
-p 显示PID
-T 不显示线程thread,默认显示线程
-u 显示用户切换
-H pid 高亮显示指定进程及其前辈进程
进程启动方式
手动启动
手动启动分为前台启动和后台启动
前台与后台执行的区别
例如:拷贝一个文件到另外一个目录这个文件很大如果放在前台执行必须等它执行结束才可以进行其他操作,但是后台不一样即使拷贝的文件再大也可以继续执行其他操作。
命令&
命令&作用把命令放入后台执行
前台执行
后台执行
进程的前后台调度
ctrl+Z组合键
将当前进程挂起,即调入后台并停止执行
jobs命令
查看后台任务列表
fg命令
将后台进程恢复到前台运行,可指定任务序号
bg命令
重新开始任务
Ctrl+C组合键
中断正在执行的命令
结束进程
kill 、killall命令
kill用于终止指定PID号的进程
-9选项用于强制终止
killall用于终止指定名称相关的所有进程
-9选项用于强制终止
kill与killall区别
kill命令,它是通过pid(进程ID)来杀死进程,要得到某个进程的pid,我们可以使用ps(process status)命令,默认情况下,kill命令发送给进程的终止信号是15,但是有些进程不会理这个信号,这样的话,可以用9信号来强制杀死,信号9是不会被忽略的强制性执行信号。
而killall和pkill都是使用命令名来终止进程的有效手段,它们不同于kill通过pid来杀死进程的方式,它可以理解为成批成批的杀死进程,当然这么做的危险性也相对提高了不少。当然它们也可以给进程发送相应的终止信号。
计划任务管理
at命令
一次性任务设置
格式:at [HH:MM] [yyy-mm-dd]
Ctrl+D:组合键提交任务
HH:MM 在今日的 HH:MM 进行,若该时刻已过,则明天此时执行任务
15:50
HH:MM YYYY-MM-DD 规定在某年某月的某一天的特殊时刻进行该项任务
15:50 2022-03-03
周期性任务设置
crontab命令
格式:
crontab [选项] [文件]
按照预先设置的时间周期重复执行用户指定的命令操作
常用选项:
-u :缺省时默认是针对当前用户,只有超级用户才可以用-u
-e:编辑计划任务
-l:查看计划任务
-r:删除计划任务
-i:交互删除计划任务
主要设置文件
全局配置文件,位于文件:/etc/crontab
项目 | 含义 | 范围 |
---|---|---|
第一个"*" | 分 | 0~59 |
第二个"*" | 时 | 0~23 |
第三个"*" | 日 | 1~31 |
第四个"*" | 月 | 1~12 |
第五个"*" | 周 | 0~7(0和7都代表星期日) |
示例:
总结
掌握程序、进程、线程
查看进程的命令:ps aux 或者ps -elf;top;pgrep;pstree;
启动进程:前台启动;后台启动(命令最后加&)
查看后台任务列表:jobs
调用后台进程:fg 任务列表号
ctrl+z挂起
kill -9 进程号 PID (强制终止)
killall 全部进程 (终止指定名称相关的所有进程)
at 小时:分:时 年-月-日
命令:ctrl D保存运行
crontab -e 编辑计划任务
crontab -l 查看计划任务
crontab -r 删除计划任务
crontab -u 指定用户
格式:分 时 日 月 周 如果忘记可以查看cat /etc/crontab
*代表任意
, 不间隔的时间,比如1,2,4 可以是每隔周几
— 连续的时间 ,例如:1-7
/ 间隔的频率 1/* 每个一分钟 1/* 每隔一个小时 1/* 每隔一天 1/* 每隔一个月