目录
一、程序
二、进程
1、什么是进程
1.1 进程的概念
1.2 进程的特征
1.3 进程、线程和协程
2、进程状态
3、进程的类型
4、进程使用内存出现的问题
三、进程管理相关命令
1、ps(process state)
1.1 用法
1.2 分析ps命令输出的内容
2、top
2.1 用法
2.2 分析top命令输出的内容
2.2.1 top 命令输出的第一部分
2.2.2 top 命令输出的第二部分
3、pgrep
4、pidof
5、pstree
6、lsof(list opened files )
7、vmstat
8、free
9、iostat
10、iotop
11、uptime
12、mpstat
13、pmap
14、webmin
编辑
15、dstat
四、进程管理
1、前台运行和后台运行
2、前台运行和后台运行相互切换的命令
2.1 &
2.2 jobs
2.3 fg
2.4 ctrl+z
2.5 bg
3、结束进程
3.1 kill
3.2 killall
3.3 pkill
五、计划任务
1、at
2、crontab
六、总结
一、程序
- 程序是一系列指令的集合,用于在计算机或其他设备上执行特定的任务或操作
- 它是以特定的编程语言编写的,可以告诉计算机如何进行计算、处理数据、执行操作或解决问题
- 通过编写程序,人们可以利用计算机的处理能力来完成各种任务,例如编写应用程序、设计网站、进行数据分析等
- 程序是计算机软件的基本组成部分,它们被编译或解释后可以在计算机上运行
二、进程
1、什么是进程
1.1 进程的概念
进程(Process)是计算机中正在运行的程序的实例,是被载入内存的一个指令集合,是资源分配和管理的基本单位。每个进程都有自己的内存空间、代码和数据,并且可以独立地执行
-
进程ID(Process ID,PID)号码被用来标记各个进程
-
UID、GID语境决定对文件系统的存取和访问权限
-
通常从执行进程的用户来继承
-
存在生命周期
-
都由其父进程创建
1.2 进程的特征
特征 | 说明 |
---|---|
动态性 | 进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的 |
并发性 | 任何进程都可以同其他进程一起并发执行 |
独立性 | 进程是系统进行资源分配和调度的一个独立单位 |
结构性 | 进程由程序、数据和进程控制块三部分组成 |
1.3 进程、线程和协程
①进程(Process)
- 进程是操作系统中的一个独立执行单位,它拥有自己的内存空间、代码和数据
- 每个进程都是独立运行的,它们之间相互隔离,无法直接访问对方的内存空间
- 进程之间通过进程间通信(IPC)来进行数据交换和协调
- 进程具有较高的安全性和稳定性,但创建和切换进程的开销较大
②线程(Thread):
- 线程是进程内的一个独立执行单元,它共享进程的内存空间和资源
- 多个线程可以同时执行不同的任务,它们可以访问相同的变量和数据
- 线程之间的切换开销较小,适合处理需要并发执行的任务
- 线程之间的通信相对容易,但需要考虑线程安全的问题
③协程(Coroutine):
- 协程是一种轻量级的线程,它由程序控制自行调度,而不是由操作系统调度。
- 协程可以在同一个线程内实现并发执行,通过协程的切换来实现任务的切换。
- 协程之间的切换开销很小,因此可以实现高效的并发编程。
- 协程通常采用非抢占式的调度方式,需要显式的让出执行权给其他协程
区别 | ||
---|---|---|
进程 | 线程 | 协程 |
操作系统分配资源的基本单位 | 操作系统调度任务的基本单位 | 程序控制自行调度的基本单位 |
进程之间相互隔离 | 线程共享进程的资源 | 协程在同一个线程内实现并发执行 |
进程和线程的切换开销较大,适用于需要较高安全性和稳定性的任务 | 协程的切换开销较小,适用于高效的并发编程 |
拓展:
如何确定一个程序是多线程还是单线程?
1. pstree -p | grep 程序名 //查看当前该程序的pid号2. grep -i threads /proc/进程的PID/status //查看当前该程序的线程
或者 prtstat 进程pid号 //查看当前程序的进程信息
2、进程状态
- 进程状态图总览:
- 新建(New):当一个程序被创建时,它处于新建状态。在这个阶段,操作系统为该程序分配必要的资源,并为其创建一个进程控制块(PCB)。
- 就绪(Ready):在就绪状态下,进程已经准备好执行,但由于CPU资源有限,操作系统尚未选择该进程来执行。在多任务环境中,可能有多个进程处于就绪状态。
- 运行(Running):当操作系统选择一个就绪进程并将其分配给CPU时,该进程进入运行状态。在运行状态下,进程的指令被执行。
- 阻塞(Blocked):在某些情况下,进程需要等待某些事件的发生,例如等待用户输入、等待I/O操作完成等。这时,进程会进入阻塞状态,并暂时释放CPU资源。
- 终止(Terminated):进程在完成其任务后或由于某种原因被终止时,进程进入终止状态。在这个状态下,进程的资源被释放,进程控制块被销毁。
3、进程的类型
- 前台进程:前台进程是用户当前正在与之交互的进程。它们通常在屏幕上显示输出,并等待用户输入。例如,运行一个应用程序或编辑文档时,相关的进程将被认为是前台进程
- 后台进程:后台进程是在后台运行的进程,不会直接与用户交互。它们通常在后台执行任务,而不会干扰用户的当前工作。例如,下载文件或执行系统维护任务的进程可以被认为是后台进程
- 守护进程:守护进程是在操作系统启动时就开始运行的进程,它们在后台运行,并且没有与之直接交互的用户界面。它们通常用于执行系统级任务,如服务监控、日志记录等。守护进程通常会在后台持续运行,直到系统关闭或显式地被停止
- 父进程和子进程:父进程是创建其他进程的进程,而子进程是由父进程创建的新进程。子进程可以继承父进程的一些属性和资源,并可以独立地执行自己的任务。这种进程之间的关系形成了进程树
- 前置进程和非前置进程:前置进程是可以被操作系统中断并停止执行的进程,而非前置进程则不会被中断。前置进程通常用于多任务操作系统中,以便操作系统可以在需要时立即切换到其他进程。
- 交互式进程和批处理进程:交互式进程是需要与用户交互的进程,而批处理进程是按照预定的命令序列自动执行的进程。交互式进程通常需要在用户输入时做出响应,而批处理进程则按照预定义的规则进行处理。
- 并发进程和并行进程:并发进程是指多个进程在一段时间内同时存在,但不一定同时执行。并行进程是指多个进程在同一时间内同时执行。并发进程可以通过时间片轮转等方式交替执行,而并行进程则需要多个处理器或多核处理器来同时执行
4、进程使用内存出现的问题
①内存泄漏:Memory Leak
指程序中用malloc或new申请了一块内存,但是没有用free或delete将内存释放,导致这块内存一直处于占用状态
②内存溢出:Memory Overflow
指程序申请了10M的空间,但是在这个空间写入10M以上字节的数据,就是溢出
③内存不足:OOM(Out Of Memory )
这种情况在java程序中比较常见。系统会选一个进程将之杀死,在日志messages中看到类似下面的提示
Jul 10 10:20:30 kernel: Out of memory: Kill process 9527 (java) score 88 or sacrifice child
//当JVM因为没有足够的内存来为对象分配空间并且垃圾回收器也已经没有空间可回收时,就会抛出这个error,因为这个问题已经严重到不足以被应用处理
出现以上问题的原因:
- 给应用分配内存太少:比如虚拟机本身可使用的内存(一般通过启动时的VM参数指定)太少
- 应用用的太多,并且用完没释放,浪费了,此时就会造成内存泄露或者内存溢出
使用的解决办法:
- 限制java进程的max heap,并且降低java程序的worker数量,从而降低内存使用
- 给系统增加swap空间
三、进程管理相关命令
1、ps(process state)
1.1 用法
显示当前运行进程的信息
选项 | 说明 | |
BSD选项 | a | 显示当前终端下的所有进程信息,包括其他用户的进程。与“x”选项结合时将示系统中所有的进程信息 |
u | 使用以用户为主的格式输出进程信息 | |
x | 显示当前用户在所有终端下的进程信息 | |
k | 倒序显示进程信息 | |
UNIX选项 | -e | 显示系统内的所有进程信息 |
-l | 使用长(Long)格式显示进程信息 | |
-f | 使用完整的(Full)格式显示进程信息 | |
GNU选项 | --help | 帮助信息 |
查看静态的进程统计信息:
ps aux //查看系统中所有的进程
ps -le //查看系统中所有的进程,而且还能看到进程的父进程的PID和进程优先级
ps -l //只能查看当前Shell产生的进程
ps axo pid,cmd,%mem,%cpu //查看进程的特定属性
ps aux k -%cpu //按CPU利用率倒序排序
ps aux k -%mem //按占用内存最多倒序排序
1.2 分析ps命令输出的内容
ps aux 命令的输出属性详解:
表头 说明 USER 该进程是由哪个用户产生的 PID 进程的pid号 %CPU 该进程占用CPU资源的百分比,占用的百分比越高,进程越耗费资源 %MEM 该进程占用物理内存的百分比,占用的百分比越高,进程越耗费资源 VSZ 该进程占用虚拟内存的大小,单位为 KB RSS 该进程占用实际物理内存的大小,单位为 KB TTY 该进程是在哪个终端运行的。?代表和终端无关,系统进程;tty1 ~ tty7 代表本地控制台终端;tty7 是图形终端;tty1~tty6 是本地的字符界面终端;pts/0 ~ 255 代表虚拟终端,一般是远程连接的终端,第一个远程连接占用 pts/0,第二个远程连接占用 pts/1,依次増长 STAT 进程状态。常见的状态有以下几种:
-D:不可被唤醒的睡眠状态,通常用于 I/O 情况
-R:该进程正在运行
-S:该进程处于睡眠状态,可被唤醒
-T:停止状态,可能是在后台暂停或进程处于除错状态
-W:内存交互状态
-X:死掉的进程
-Z:僵尸进程。进程已经中止,但是还是占用硬件资源
-<:高优先级
-N:低优先级
-L:被锁入内存
-s:包含子进程
-l:多线程
-+:前台进程
START 该进程的启动时间 TIME 该进程占用 CPU 的运算时间,注意不是系统时间 COMMAND 产生此进程的命令名
ps -ef 命令的输出属性详解:
表头 说明 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
2.1 用法
用于实时监视系统运行状态的常用工具,提供了对系统各种资源利用情况的实时动态展示,包括 CPU 使用率、内存占用、进程信息等
选项 | 说明 |
---|---|
-d 秒数 | 指定 top 命令每隔几秒更新。默认是 3 秒 |
-b | 使用批处理模式输出。一般和"-n"选项合用,用于把 top 命令重定向到文件中 |
-n 次数 | 指定 top 命令执行的次数 |
-p 进程pid | 仅查看指定pid的进程 |
-s | 使 top 命令在安全模式中运行,避免在交互模式中出现错误 |
-u 用户名 | 只监听某个用户的进程 |
在 top 命令的显示窗口中,还可以使用如下按键,进行一下交互操作:
操作键 | 说明 |
---|---|
? 或 h | 显示交互模式的帮助 |
c | 按照 CPU 的使用率排序,默认就是此选项 |
M | 按照内存的使用率排序 |
N | 按照 PID 排序 |
T | 按照 CPU 的累积运算时间排序,也就是按照 TIME+ 项排序 |
k | 按照 PID 给予某个进程一个信号。一般用于中止某个进程,信号 9 是强制中止的信号 |
r | 按照 PID 给某个进程重设优先级(Nice)值 |
q | 退出 top 命令 |
2.2 分析top命令输出的内容
top 命令的输出内容是动态的,默认每隔 3 秒刷新一次。命令的输出主要分为两部分:
- 第一部分是前五行,显示的是整个系统的资源使用状况,我们就是通过这些输出来判断服务器的资源使用状态的
- 第二部分从第六行开始,显示的是系统中进程的信息
2.2.1 top 命令输出的第一部分
第一行为任务队列信息,具体内容如表所示:
内 容 | 说 明 |
---|---|
19:24:57 | 系统当前时间 |
up 12 min | 系统的运行时间,本机已运行了12min |
1 users | 当前登录了一个用户 |
load average: 0.00, 0.01,0.04 | 系统在之前 1 分钟、5 分钟、15 分钟的平均负载。如果 CPU 是单核的,则这个数值超过 1 就是高负载:如果 CPU 是四核的,则这个数值超过 4 就是高负载 (这个平均负载完全是依据个人经验来进行判断的,一般认为不应该超过服务器 CPU 的核数) |
第二行为进程信息,具体内容如表所示:
内 容 | 说 明 |
---|---|
Tasks: 161 total | 系统中的进程总数 |
1 running | 正在运行的进程数 |
160 sleeping | 睡眠的进程数 |
0 stopped | 正在停止的进程数 |
0 zombie | 僵尸进程数。如果不是 0,则需要手工检查僵尸进程 |
第三行为 CPU 信息,具体内容如表所示:
内 容 | 说 明 |
---|---|
Cpu(s): 0.0 %us | 用户模式占用的 CPU 百分比 个人用户开启的进程占用的 cpu 率 |
0.1%sy | 系统模式占用的 CPU 百分比 |
0.0%ni | 改变过优先级的用户进程占用的 CPU 百分比 |
99.9%id | 空闲 CPU 占用的 CPU 百分比 |
0.0%wa | 等待输入/输出的进程占用的 CPU 百分比 |
0.0%hi | 硬中断请求服务占用的 CPU 百分比 |
0.0%si | 软中断请求服务占用的 CPU 百分比 |
0.0%st | st(steal time)意为虚拟程序占用 cpu 时间百分比,就是当有虚拟机时,虚拟CPU等待实际CPU的时间百分比 |
第四行为物理内存信息,具体内容如表所示:
内 容 | 说 明 |
---|---|
Mem: 1867048k total | 物理内存的总量,单位为KB |
1216592 free | 空闲的物理内存数量 |
281812k used | 己经使用的物理内存数量 |
368644k buffer | 作为缓冲的内存数量 |
第五行为交换分区(swap)信息,具体内容如表所示:
内 容 | 说 明 |
---|---|
Swap: 4194300k total | 交换分区(虚拟内存)的总大小 |
0k used | 已经使用的交换分区的大小 |
419300k free | 空闲交换分区的大小 |
1392216k cache | 作为缓存的交换分区的大小 |
注:
通过 top 命令的第一部分就可以判断服务器的健康状态。如果 1 分钟、5 分钟、15 分钟的平均负载高于 1,则证明系统压力较大。如果 CPU 的使用率过高或空闲率过低,则证明系统压力较大。如果物理内存的空闲内存过小,则也证明系统压力较大
2.2.2 top 命令输出的第二部分
主要是系统进程信息
表头 | 说明 |
---|---|
PID | 进程的 ID |
USER | 该进程所属的用户 |
PR | 优先级,数值越小优先级越高 |
NI | 优先级,数值越小、优先级越高 |
VIRT | 该进程使用的虚拟内存的大小,单位为 KB |
RES | 该进程使用的物理内存的大小,单位为 KB |
SHR | 共享内存大小,单位为 KB |
S | 进程状态 |
%CPU | 该进程占用 CPU 的百分比 |
%MEM | 该进程占用内存的百分比 |
TIME+ | 该进程共占用的 CPU 时间 |
COMMAND | 进程的命令名 |
3、pgrep
根据进程名或者其他属性来查找进程的 PID
选项 | 说明 |
---|---|
-U | 指定用户 |
-l | 显示进程名 |
-a | 显示完整格式的进程名 |
-P pid | 显示指定进程的子进程 |
pgrep -l "log" //显示以“log”为名的进程pid
pgrep -l -U dh //查看指定用户为dh的进程pid
4、pidof
用于查找指定进程的进程pid,它可以接受一个或多个进程名作为参数,并返回匹配进程名的所有进程的 pid
通式: pidof 进程名1 进程名2
5、pstree
用于以树状图的形式显示进程之间的父子关系。它将按照进程的层次结构展示进程及其子进程,使得用户可以清晰地了解进程之间的关系
选项 | 说明 |
---|---|
-a | 显示启动每个进程对应的完整指令,包括启动进程的路径、参数等 |
-p | 显示PID |
-T | 不显示线程thread,默认显示线程 |
-u | 显示用户切换 |
-H pid | 高亮显示指定进程及其前辈进程 |
pstree -p |grep nginx //过滤nginx进程的pid号
pstree dh //查看用户dh的进程
pstree 2382 //查看pid号为2382的进程
6、lsof(list opened files )
用于显示系统中已经打开的文件,以及这些文件被哪些进程所使用。它可以帮助用户查看文件被哪些进程打开、网络连接情况等
选项 | 说明 |
---|---|
-c 字符串 | 只列出以字符串开头的进程打开的文件 |
+d 目录名 | 列出某个目录中所有被进程调用的文件 |
-u 用户名 | 只列出某个用户的进程打开的文件 |
-p pid | 列出某个 PID 进程打开的文件 |
-t | 仅显示进程ID |
-i | 如lsof -i :80 查看哪些程序占用80端口 |
7、vmstat
用于显示系统的虚拟内存统计信息,包括进程、内存、交换分区、I/O 等方面的性能数据。它可以帮助用户实时监视系统的负载情况,以及发现潜在的性能问题
选项 | 说明 |
---|---|
-n | 指定输出间隔和次数,如 vmstat 2 5 表示每隔 2 秒输出一次,共输出 5 次 |
-a | 显示活跃和非活跃内存的状态 |
-s | 显示内存的统计摘要信息 |
-p 分区设备文件名 | 查看硬盘分区的读写情况 |
-d | 列出硬盘有关读写总量的统计表 |
分析vmstat命令输出的内容:
字段 | 说明 |
---|---|
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 命令的输出结果中,我们应该重点注意 procs 项中 r 列的值,以及 CPU 项中 us 列、sy 列和 id 列的值
8、free
用于显示系统内存的使用情况,包括物理内存、交换空间和操作系统内核缓冲区的信息
选项 | 说明 |
---|---|
-h | 以更易读的单位(如 KB、MB、GB)显示内存使用情况 |
-s 时间 | 指定 free 命令的刷新间隔 |
-b | 以字节为单位显示内存使用情况 |
-k | 以千字节为单位显示内存使用情况 |
-m | 以兆字节为单位显示内存使用情况 |
-g | 以吉字节为单位显示内存使用情况 |
拓展:
一台服务器正常使用但使用一周后开机非常卡顿
答:内存缓存太多,需要及时清理缓存,或者内存不足,需要添加内存条
echo 3 > /proc/sys/vm/drop_caches //清除缓存
9、iostat
用于显示 CPU 使用情况和设备(磁盘、终端、网络文件系统等)的输入/输出统计数据。它能够帮助用户监视系统的磁盘活动和 CPU 使用情况,以便及时发现系统性能问题
选项 | 说明 |
---|---|
-c | 只显示CPU行 |
-d | 显示设备〈磁盘)使用状态 |
-k | 以千字节为为单位显示输出 |
-t | 在输出中包括时间戳 |
-x | 在输出中包括扩展的磁盘指标 |
10、iotop
用于显示系统中磁盘 I/O 活动情况,并能够实时监视各个进程的磁盘 I/O 使用情况,类似于 top
命令对 CPU 使用情况的监视。这使得用户可以快速了解哪些进程正在对磁盘进行读取和写入操作
选项 | 说明 |
---|---|
-o | 只显示有磁盘 I/O 活动的进程 |
-b | 以批处理模式运,适合脚本使用 |
-n | 指定刷新间隔和次数,如 iotop -n 5 表示刷新 5 次后退出 |
iftop -ni ens33 //监控网络流量
11、uptime
用于显示系统的运行时间以及平均负载情况。它能够帮助用户了解系统的活跃时间,以及在最近 1、5 和 15 分钟内的平均负载情况
12、mpstat
用于显示每个 CPU 的性能统计信息,包括平均负载、用户空间和系统空间的 CPU 时间比例等。这对于分析系统的 CPU 性能以及发现可能存在的性能瓶颈非常有帮助
选项 | 说明 |
---|---|
-P | 后面可以跟一个 CPU 编号,表示只显示指定 CPU 的统计信息 |
-u | 显示 CPU 使用率的详细信息 |
-I | 显示中断的统计信息 |
13、pmap
用于显示进程的内存映射信息。它可以显示进程使用的内存区域的详细信息,包括内存映射的起始地址、权限、偏移量、设备、inode
pmap 选项 进程的pid
选项 | 说明 |
---|---|
-x | 以十六进制的形式显示内存地址 |
-d | 显示调试信息,包括共享库、符号表等 |
-q | 简化模式,只显示每个内存区域的起始地址和大小 |
-p | 显示内存区域所属的共享库或文件路径 |
-X | 以十六进制的形式显示内存权限标志 |
-h | 以更易读的单位(如 KB、MB、GB)显示内存大小 |
-L | 显示线程的内存映射信息 |
14、webmin
webmin是一个基于Web界面的系统管理工具,提供了一个直观的图形用户界面,使系统管理员能够通过浏览器远程管理系统。
Webmin可以用来配置和管理各种系统组件和服务,例如用户帐户、磁盘配额、文件共享、防火墙、网络设置等等。
wget https://prdownloads.sourceforge.net/webadmin/webmin-1.955-1.noarch.rpm
//从官网上下载安装包
yum -y install webmin-1.955-1.noarch.rpm //下载webmin工具
service webmin start //开启webmin程序服务
systemctl stop firewalld //关闭防火墙
setenforce 0 //临时关闭防护
https://IP地址:10000/ //从浏览器远程管理Linux
输入Linux账户和密码后可登录到webmin,可远程管理系统
15、dstat
dstat是一个开源的系统性能监控工具,用于收集和报告有关系统资源使用情况的数据。它可以提供即时的系统性能统计,涵盖各个方面,如CPU利用率、内存使用情况、磁盘活动、网络吞吐量等。dstat以文本形式输出数据,可以通过在终端中运行命令或将输出保存到文件中进行查看和分析
四、进程管理
1、前台运行和后台运行
前台运行(Foreground)指的是进程在用户界面中可见并与用户进行交互的执行方式。当进程在前台运行时,它会占据屏幕,并且用户的命令输入和程序输出都会在用户界面中显示。前台运行的进程通常需要用户的输入或响应,因此它们会阻塞用户界面,直到特定操作完成或用户交互完成
后台运行(Background)指的是进程在后台执行而不占据用户界面或阻塞用户输入的方式。后台运行的进程不会直接与用户进行交互,它们在后台默默地执行任务。用户可以继续在用户界面中进行其他操作,而后台进程会在后台继续执行
2、前台运行和后台运行相互切换的命令
2.1 &
特殊字符“&”,表示把前台运行的命令放入后台执行
2.2 jobs
查看后台任务列表
2.3 fg
调出后台任务到前台执行
2.4 ctrl+z
把任务再调回后台,但该任务会停止运行
2.5 bg
可以从新开始后台停止的服务
2.6 并行执行任务
案例:
执行ping命令,需要ping 172.16.12网段的所有ip地址,并将其转入后台执行
编写test.sh脚本:
#!/bin/bash
for i in {1..254}
do
{
ping -c1 -w2 172.16.12.${i} &>/dev/null && echo "$i is online" >> /opt/online || echo "$i is offline" >> /opt/offline
}&
done
3、结束进程
3.1 kill
kill
命令用于终止正在运行的进程。它发送一个信号给指定的进程,告诉进程如何处理这个信号
kill 信号 进程PID号
信号编号 | 信号名 | 说明 |
---|---|---|
0 | EXIT | 程序退出时收到该信息 |
1 | HUP | 挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化 |
2 | INT | 表示结束进程,但并不是强制性的,常用的 "Ctrl+C" 组合键发出就是一个 kill -2 的信号 |
3 | QUIT | 退出 |
9 | KILL | 杀死进程,即强制结束进程 |
11 | SEGV | 段错误 |
15 | TERM | 正常结束进程,是 kill 命令的默认信号 |
注:
- 对于非特权用户,只能终止自己拥有的进程
- kill命令只能识别进程pid号,不能识别进程名
- 使用
kill
命令时需要小心,因为误操作可能导致数据丢失或系统不稳定
3.2 killall
用于终止指定名称的进程。它会发送一个信号给所有与指定名称匹配的进程,从而终止这些进程
killall 选项 信号 进程名
选项 | 说明 |
---|---|
| 在终止每个进程之前进行交互式确认 |
-e | 只终止完全匹配的进程名 |
-g | 向进程组发送信号 |
-I | 忽略进程名的大小写; |
注:
- 使用
killall
命令时需要谨慎,因为它会终止所有匹配的进程,可能导致意外的结果 - 在使用
killall
命令时最好明确指定进程名,以避免意外终止错误的进程
3.3 pkill
用于根据进程名称终止进程。它会发送一个信号给与指定名称匹配的进程,从而终止这些进程
pkill 信号 进程名
选项 | 说明 |
---|---|
| 指定要发送的信号 |
-u username 或 --euid username | 根据用户名终止进程 |
-f 或 --full | 根据完整命令行终止进程 |
注:
- 使用
pkill
命令时需要小心,因为它会终止所有匹配的进程,可能导致意外的结果 - 在使用
pkill
命令时最好明确指定进程名或其他选项,以避免意外终止错误的进程
五、计划任务
1、at
at
命令用于在将来的某个时间执行一次性的任务。用户可以使用at
命令指定一个时间来执行某个命令或脚本,该任务将在指定的时间执行一次,然后退出
at 选项 时间
格式 | 用法 |
---|---|
HH:MM | 比如 04:00 AM。如果时间已过,则它会在第二天的同一时间执行 |
Midnight(midnight) | 代表 12:00 AM(也就是 00:00) |
Noon(noon) | 代表 12:00 PM(相当于 12:00) |
Teatime(teatime)下午茶 | 代表 4:00 PM(相当于 16:00) |
英文月名 日期 年份 | 比如 January 15 2018 表示 2018 年 1 月 15 号,年份可有可无 |
MMDDYY、MM/DD/YY、MM.DD.YY | 比如 011518 表示 2018 年 1 月 15 号 |
now+时间 | 以 minutes、hours、days 或 weeks 为单位,例如 now+5 days 表示命令在 5 天之后的此时此刻执行 |
atq //查看任务列表
atrm 任务序列号 //删除任务
注:
- 如果系统中有 /etc/at.allow 文件,那么只有写入 /etc/at.allow 文件(白名单)中的用户可以使用 at 命令,其他用户不能使用 at 命令
- 如果系统中没有 /etc/at.allow 文件,只有 /etc/at.deny 文件,那么写入 /etc/at.deny 文件(黑名单)中的用户不能使用 at 命令,其他用户可以使用 at 命令。不过这个文件对 root 用户不生效
- 如果系统中这两个文件都不存在,那么只有 root 用户可以使用 at 命令
2、crontab
用于在预定时间执行任务的命令。它允许用户创建、编辑、显示和删除定期运行的任务(也称为 cron 作业)
基本语法: crontab 选项
选项 | 功能 |
---|---|
-e | 编辑某个用户的 crontab 文件内容。如果不指定用户,则表示编辑当前用户的 crontab 文件 |
-l | 显示某用户的 crontab 文件内容,如果不指定用户,则表示显示当前用户的 crontab 文件内容 |
-r | 从 /var/spool/cron 删除某用户的 crontab 文件,如果不指定用户,则默认删除当前用户的 crontab 文件 |
-u user | 用来设定某个用户的 crontab 服务,例如 "-u demo" 表示设备 demo 用户的 crontab 服务,此选项一般有 root 用户来运行。 |
-i | 在删除用户的 crontab 文件时,给确认提示 |
crontab文件格式: * * * * * command
说明 | |
---|---|
第一个 * | 指定分钟(0 ~ 59) |
第二个 * | 指定小时(0 ~ 23) |
第三个 * | 指定月份中的某一天(1 ~ 31) |
第四个 * | 指定月份(1 ~ 12) |
第五个 * | 指定星期中的某一天(0 ~ 6,0 代表星期日) |
command | 指定要执行的命令或脚本 |
特殊符号 | 说明 |
---|---|
*(星号) | 表示该范围内的任意时间 |
,(逗号) | 表示间隔的多个不连续时间点 |
-(中杠) | 表示一个连续的时间范围 |
/(正斜线) | 指定间隔的时间频率,代表每隔多久执行一次 |
如:
0 17 * * 1-5 //周一到周五每天17:00
30 8 * * 1,3,5 //每周一、三、五的8:30
0 8-18/2 * * * //8点到18点之间每两个小时
0 * */3 * * //每3天
实例:
要求:每两分钟执行将/etc/passwd文件复制到/opt下
crontab -e //编辑cron任务计划
文件内容:
*/2 * * * * /usr/bin/cp /etc/passwd /opt
或者
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
//当cp命令不写绝对路径时需要添加这一行
*/2 * * * * cp /etc/passwd /opt
crontab -l //列出当前用户的cron表
crontab -r //删除当前用户的cron表
注:
-
6 个选项都不能为空,必须填写。如果不确定,则使用“*”代表任意时间
-
crontab 定时任务的最小有效时间是分钟,最大有效时间是月
-
在定义时间时,日期和星期最好不要在一条定时任务中出现,因为它们都以天为单位,非常容易让管理员混淆
-
在定时任务中,不管是直接写命令,还是在脚本中写命令,最好都使用绝对路径。有时使用相对路径的命令会报错
拓展:
*/2 * * * * /usr/bin/touch /data/`date +\%F` */2 * * * * /usr/bin/touch /data/`date +%F`
//上下两行文件格式中,上面那行可以被执行,但下面那行不能被执行
原因:上下两行的区别是上面那行在“%”前添加了转义符“\”
cron任务中不建议使用%,它有特殊用途,它表示换行的特殊意义,且第一个%后的所有字符串会被将成当作命令的标准输入,如果在命令中要使用%,则需要用 \ 转义
注意:将%放置于单引号中是不支持的
六、总结
五大性能:
- CPU:top、w、vmstat
- 内存:free、top、vmstat
- 磁盘剩余:df
- 硬盘读写性能:iostat
- 网络带宽:iftop
如何优化系统:
- 关闭不必要的开机自启动程序
- 禁止使用超级管理员用户
- 使用国内的yum源
- 内核调优:开启路由转发功能、增加tcp链接数
- 关闭核心防护selinux