文章目录
- Linux的五大负载
- 1. CPU负载
- 2. 内存负载
- 3. 磁盘负载
- 4. 网络负载
- 5. 进程负载
- 常用的相关命令
- ps命令-获取系统中正在运行的进程的详细信息
- 常用选项及其含义
- 示例
- 输出示例解析——以`ps -aux` 和`ps -elf`为例
- ps -aux
- ps -elf
- top命令-查看动态的进程统计信息
- top命令简述
- 基础格式
- 常用选项
- 使用示例
- 输出示例及字段含义
- `top` 输出示例
- 字段含义
- 1. 顶部信息行
- 2.任务(Tasks)和CPU信息
- 3.内存和交换区信息
- 4.进程列表
- 些常用的`top`交互界面指令:
- pgrep命令-查看进程的信息
- 常用选项(Markdown表格)
- 使用示例
- jobs命令
- 基本用法
- 选项
- 示例
- pstree命令-查看进程树
- 一、命令功能
- 二、命令语法
- 三、常用选项
- 四、示例
- 五、注意
- 进程
- 进程的启动方式
- 1. 手工启动进程
- 2. 调度启动进程
- 3. 使用系统启动脚本
- 4. 使用systemd或Upstart
- 5. 编程方式启动
- 进程的前后台调度
- 1. 前台到后台的调度
- 2. 后台到前台的调度
- 3. 后台任务的持续运行
- 4. 注意
- 终止进程的运行
- 1. kill命令
- 2. killall命令
- 3. pkill命令
- 4. 其他方法
- 注意
- at命令-计划任务管理
- 一、基本概念
- 二、使用步骤
- 三、注意事项
- 四、应用场景
- crontab命令-周期性计划任务管理
- crontab的计划任务管理
- 一、crontab的配置格式
- 二、crontab实例
- 三、crontab相关命令
Linux的五大负载
主要包括CPU负载、内存负载、磁盘负载、网络负载和进程负载。
1. CPU负载
优化方法:
- 使用监控工具:如top、htop等,可以实时查看CPU的占用情况,并识别出占用CPU资源较多的进程。
- 优化代码:对于占用CPU资源过多的进程,可以考虑优化其代码,减少不必要的计算或循环。
- 增加CPU核心:如果系统负载高是因为CPU数量不足造成的,可以考虑增加CPU核心数。
相关工具:
- top:显示系统中各个进程的资源占用情况,包括CPU、内存等。
- htop:top命令的增强版,提供了更丰富的功能和更友好的用户界面。
CPU资源查询的相关命令(有端联想):
- top
- ps
- pgrep
- lsof
- cat /proc/cpuinfo
- uname -r
2. 内存负载
优化方法:
- 使用监控工具:如free、top等,可以查看内存的使用情况,识别出内存占用较大的进程。
- 优化应用程序:分析应用程序中的内存泄漏情况,并进行优化。
- 增加内存:如果系统内存不足,可以考虑增加物理内存。
- 清理缓存:使用
echo 1 > /proc/sys/vm/drop_caches
命令释放缓存(注意:此命令通常仅在需要时才使用,因为频繁清理缓存可能会降低文件系统的性能)。
相关工具:
- free:显示系统的总内存、已用内存、空闲内存等信息。
- top:同上,也可查看内存占用情况。
内存资源查询的相关命令(有端联想):
- free -m
- top
- cat /proc/meminfo | grep mem
- cat /proc/vmstat
3. 磁盘负载
优化方法:
- 使用监控工具:如iostat、iotop等,可以监控磁盘的读写性能和占用情况。
- 优化磁盘IO:对于磁盘IO性能瓶颈,可以考虑优化磁盘的读写策略,如使用RAID技术、增加磁盘缓存等。
- 清理磁盘空间:定期清理不必要的文件和日志,释放磁盘空间。
相关工具:
- iostat:监控磁盘IO性能。
- iotop:动态监控进程占用磁盘的读写情况。
磁盘资源查询的相关命令(有端联想):
- df
- du
- fdisk
- lsblk
- swapon/off
- cat /proc/diskstat
- cat /proc/mdstat
4. 网络负载
优化方法:
- 使用监控工具:如iftop、nload等,可以监控网络带宽的使用情况。
- 优化网络配置:调整TCP/IP协议栈的参数,优化网络连接的性能。
- 使用加速器:如负载均衡器、代理服务器等,可以提高网络带宽的使用效率。
相关工具:
- iftop:动态监控网络流量数据。
- nload:显示实时网络带宽使用情况。
网络资源查询的相关命令(有端联想):
- netstat
- nmap
- ifconfig / ip addr
- ping
- tcpdump
5. 进程负载
优化方法:
- 使用监控工具:如top、htop、ps等,可以查看进程的资源占用情况。
- 管理进程:对于占用资源过多的进程,可以考虑优化其执行逻辑或限制其资源使用。
- 使用定时任务:通过crontab等工具设置定时任务,自动管理进程的执行和退出。
相关工具:
- top、htop:同上,用于查看进程资源占用情况。
- ps:显示当前系统中的进程状态。
- crontab:设置定时任务。
综上所述,Linux的五大负载优化需要综合考虑系统的各个方面,通过合理的监控、分析和调整,以达到提升系统性能和稳定性的目的。
进程信息查询的相关命令(有端联想):
- top(动态)
- ps -elf / -aux(静态)
- pgrep
- pstree
- lsof
- jobs(后台进程)
常用的相关命令
ps命令-获取系统中正在运行的进程的详细信息
ps
命令是Linux和Unix系统中用于显示当前进程状态的工具,全称为“Process Status”。通过该命令,用户可以获取系统中正在运行的进程的详细信息,包括进程ID、CPU使用率、内存占用等。
常用选项及其含义
选项 | 含义 |
---|---|
-e, -A | 显示所有进程(包括其他用户的进程)。 |
-f | 全格式显示进程信息,包括UID、PID、PPID、C、STIME、TTY、TIME和CMD等。 |
-l | 长格式显示进程信息,比-f选项更详细,但通常不包含内存和CPU使用率。 |
-u | 显示指定用户的进程信息。 |
-p | 显示指定PID的进程信息。 |
-x | 显示所有进程,包括没有控制终端的进程。 |
-aux | 结合了a、u和x选项的功能,以用户友好的格式显示所有进程的详细信息。 |
–sort | 根据指定的列对输出进行排序。例如,--sort=-%mem 表示按内存使用率降序排序。 |
-o | 自定义输出格式,允许用户指定要显示的列。 |
示例
-
显示当前用户的所有进程:
ps
注意:此命令默认输出可能因环境而异,通常显示当前终端会话中的进程。
-
显示系统中所有进程的详细信息:
ps -ef
输出将包括所有进程的UID、PID、PPID、C、STIME、TTY、TIME和CMD等字段。
-
按内存使用率降序排序显示所有进程:
ps -eo pid,%mem,cmd --sort=-%mem
此命令将仅显示进程ID、内存使用率和命令行,并按内存使用率从高到低排序。
-
显示指定用户的进程:
ps -u username
将
username
替换为实际用户名,以显示该用户的所有进程。 -
显示指定PID的进程信息:
ps -p PID
将
PID
替换为实际进程ID,以显示该进程的详细信息。
输出示例解析——以ps -aux
和ps -elf
为例
ps -aux
输出示例(实际输出可能因Linux发行版而异):
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 194064 10484 ? Ss 05:01 0:02 /sbin/init
root 2 0.0 0.0 0 0 ? S 05:01 0:00 [kthreadd]
...
username 1234 0.5 1.2 234567 89101 pts/0 Ss 08:10 0:01 /bin/bash
...
字段含义:
- USER:运行进程的用户名。
- PID:进程ID,唯一标识一个进程。
- %CPU:进程占用的CPU百分比。
- %MEM:进程占用的物理内存百分比。
- VSZ:虚拟内存大小,包括进程使用的代码、数据、栈等,以KB为单位。
- RSS:常驻集大小,即进程当前占用的物理内存量(不包括交换空间),以KB为单位。
- TTY:进程关联的终端类型。问号(?)表示该进程没有关联到任何终端。
- STAT:进程状态,如S(睡眠)、R(运行)、Z(僵尸)等。
- START:进程启动时间。
- TIME:进程自启动以来占用的CPU时间。
- COMMAND:启动进程的命令行名称或命令。
ps -elf
输出示例(注意:实际输出可能因Linux发行版而异):
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S root 1 0 0 80 0 - 12976 - 05:01 ? 00:00:02 /sbin/init
1 S root 2 0 0 80 0 - 0 - 05:01 ? 00:00:00 [kthreadd]
...
1 S username 1234 1235 0 20 0 - 12345 wait 08:10 pts/0 00:00:01 /bin/bash
...
字段含义:
- F:进程标志,通常用于表示进程的一些特殊状态或属性,但具体含义可能因系统而异。
- S:进程状态,如S(睡眠)、R(运行)等,但这里与
STAT
字段略有不同,因为它可能更侧重于内核级别的状态表示。 - UID:运行进程的用户ID。
- PID:进程ID,唯一标识一个进程。
- PPID:父进程ID,表示创建该进程的父进程。
- C:CPU使用率的一个估算值,表示进程使用的CPU时间片数量。
- PRI:进程的优先级。
- NI:进程的Nice值,用于调整进程的优先级。
- ADDR:进程的内存地址,但通常这个字段在
ps -elf
输出中可能不直接显示有效的内存地址。 - SZ:进程使用的物理内存的大小(以页面为单位),但具体单位可能因系统而异。
- WCHAN:进程正在等待的事件或资源,如果进程正在睡眠,则显示其等待的通道名。
- STIME:进程启动时间。
- TTY:进程关联的终端类型。
- TIME:进程自启动以来占用的CPU时间。
- CMD:启动进程的命令行名称或命令。
top命令-查看动态的进程统计信息
top命令简述
top
命令是Linux和Unix系统下用于实时显示系统中各个进程的资源占用状况的命令,类似于Windows的任务管理器。它提供了系统的整体性能信息和当前正在运行的进程的详细信息,并允许用户进行排序、过滤等操作以获取所需的信息。
基础格式
top [-选项]
其中,-选项
是可选的,用于指定top
命令的行为。如果不带任何选项,top
将以默认模式运行。
常用选项
选项 | 含义 |
---|---|
-d 秒数 | 指定top 命令刷新的时间间隔(秒)。 |
-n 次数 | 指定top 命令运行并刷新的次数后退出。 |
-p 进程ID | 仅显示指定进程ID的进程信息。 |
-u 用户名 | 仅显示指定用户名的进程信息。 |
-b | 批处理模式,将结果输出到标准输出或文件,而不是在终端中显示。 |
-c | 显示完整的命令行,而不是截断。 |
-H | 显示线程信息。 |
-i | 忽略闲置和僵尸进程。 |
-o 字段 | 根据指定的字段对进程进行排序。 |
使用示例
- 默认启动:直接输入
top
并回车。 - 每5秒刷新一次:
top -d 5
。 - 运行3次后退出:
top -n 3
。 - 仅显示用户名为user的进程:
top -u user
。
输出示例及字段含义
top
命令是 Linux 和类 Unix 系统中一个非常强大的实时监控系统性能的工具。它显示了系统中进程的动态管理视图,包括 CPU、内存使用情况,以及运行中的进程等信息。以下是一个 top
命令输出的示例,以及每个字段的详细含义。
top
输出示例
top - 12:34:56 up 2 days, 4:10, 2 users, load average: 0.00, 0.01, 0.05
Tasks: 204 total, 1 running, 203 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.5 us, 0.5 sy, 0.0 ni, 98.8 id, 0.0 wa, 0.0 hi, 0.2 si, 0.0 st
MiB Mem : 8192.0 total, 1234.0 free, 5678.0 used, 1280.0 buff/cache
MiB Swap: 2048.0 total, 512.0 free, 1536.0 used. 2500.0 avail MemPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND1234 user1 20 0 2322704 1.214g 1436 S 0.3 15.6 0:11.12 firefox2345 user2 20 0 860232 341m 28m S 0.0 4.3 0:02.34 gnome-terminal...
字段含义
1. 顶部信息行
- 时间戳 (
top - 12:34:56
):显示top
命令被调用的确切时间。 - 系统运行时间 (
up 2 days, 4:10
):表示系统自上次启动以来已经运行了多少天、小时和分钟。 - 用户登录数 (
2 users
):当前登录到系统的用户数量。 - 负载平均值 (
load average: 0.00, 0.01, 0.05
):分别表示在过去1分钟、5分钟和15分钟内,系统处于运行状态和不可中断状态的平均进程数。这个数值提供了系统负载的即时和历史视图,有助于了解系统的繁忙程度。
关于Load Average的解读
- 小于1:
当Load Average的值小于1时,表示系统的负载较轻,CPU资源相对充足,系统能够轻松处理当前的负载。 - 等于1:
当Load Average的值等于1时,表示系统的负载达到了一个平衡点,即每个CPU核心都在满负荷工作。此时,系统仍然能够处理新的负载,但可能需要开始考虑优化或增加资源。 - 大于1:
当Load Average的值大于1时,表示系统的负载超过了CPU核心的处理能力。此时,系统可能会出现性能瓶颈,导致响应速度变慢或任务执行延迟。 - 超过CPU核心数(大于1且小于5):
如果Load Average的数值超过了系统的CPU核心数,那么系统就处于过载状态。这种情况下,系统可能无法及时处理所有任务,导致性能显著下降。
实际应用中的判断标准:
- 一些建议认为在多核系统中,理想的Load Average值应该低于CPU核心数的0.7倍(即Load Average < CPU核心数 * 0.7)。这个值可以作为一个参考,但并不是绝对的标准。实际上,合理的Load Average值需要根据系统的具体情况进行调整。
- 低负载:Load Average小于
0.7*CPU逻辑核数
,表示系统非常空闲,可以考虑增加新的服务或任务。 - 正常负载:Load Average在
(0.7~1)*CPU逻辑核数
,表示系统状态良好,能够处理当前负载。(当平均负载持续大于0.7*CPU
逻辑核数,就需要开始调查原因,防止系统恶化。当平均负载持续大于1.0*CPU
逻辑核数,必须寻找解决办法,降低平均负载。) - 高负载:Load Average大于
1*CPU 逻辑核数
,表示系统负载较重,需要关注系统性能并考虑优化。 - 过载:Load Average超过CPU核心数(5),表示系统已经过载,需要立即采取措施减轻负载。(当平均负载持续大于
5.0*CPU 逻辑核数
,表明系统已出现严重问题,长时间未响应,或者接近死机。)
- 低负载:Load Average小于
2.任务(Tasks)和CPU信息
- 任务总数 (
Tasks: 204 total
):当前系统中的进程总数。 - 运行状态:
1 running
:当前处于运行状态的进程数(实际上,由于时间片轮转机制,任何时刻通常只有一个进程在CPU上运行,但top
可能显示多个进程处于“running”状态,因为它们的调度时间片很快就要到来)。203 sleeping
:处于睡眠状态的进程数,等待某些事件发生(如I/O操作完成)以继续执行。stopped
和zombie
:分别表示停止(通常是因为接收到了停止信号)和僵尸(已经结束但父进程尚未回收其资源的)进程的数量。
- CPU使用情况 (
%Cpu(s): 0.5 us, 0.5 sy, ...
):us
(用户空间):表示在用户模式下运行的时间百分比。sy
(系统空间):表示在内核模式下运行的时间百分比。ni
(改变过优先级的进程):表示通过nice值改变的进程占用的CPU时间百分比。id
(空闲):表示CPU空闲的时间百分比。wa
(I/O等待):表示CPU等待I/O操作完成的时间百分比。hi
(硬件中断):表示处理硬件中断的时间百分比。si
(软件中断):表示处理软件中断(如系统调用)的时间百分比。st
(被虚拟机偷走的时间):在虚拟化环境中,这个值表示CPU时间被宿主操作系统或虚拟机管理程序占用的百分比(不是所有系统都显示这个值)。
3.内存和交换区信息
- 物理内存 (
MiB Mem : 8192.0 total, ...
):total
:物理内存总量。free
:未被使用的物理内存量。used
:已被进程使用的物理内存量(不包括缓冲/缓存)。buff/cache
:用作缓冲和缓存的物理内存量。这部分内存可以被回收用于新进程,因此它实际上减少了需要交换(swap)的需求。
- 交换空间 (
MiB Swap: 2048.0 total, ...
):total
:交换空间总量。free
:空闲的交换空间量。used
:已使用的交换空间量。avail Mem
:估计的可用内存量,考虑了物理内存、交换空间以及缓冲/缓存的影响。这个值提供了关于系统是否有足够内存来处理新任务的即时信息。
4.进程列表
- PID:进程ID,是系统中每个进程的唯一标识符。
- USER:运行该进程的用户名。
- PR和NI:PR(优先级)和NI(nice值)共同决定了进程被CPU调度的优先级。NI值越低,PR值越低,进程越有可能获得CPU时间。
- VIRT、RES和SHR:分别表示进程的虚拟内存大小、常驻内存大小和共享内存大小。
- S:进程状态,常见的状态有
R
(运行)、S
(睡眠)、T
(停止)和Z
(僵尸)。 - %CPU和 %MEM:分别表示进程占用的CPU和物理内存的百分比。
- TIME+:进程自启动以来占用的CPU时间总和,格式为
分钟:秒.百分之一秒
。 - COMMAND:启动进程的命令行名称或命令。有时,如果命令太长,它可能会被截断。
注意,top
命令的输出是实时更新的,通常每几秒钟刷新一次,以显示最新的系统状态。可以通过按 q
键退出 top
命令。
些常用的top
交互界面指令:
-
刷新和退出
- s:修改屏幕刷新的时间间隔。按下
s
后,系统会提示用户输入新的刷新时间(以秒为单位)。较小的值表示更频繁的刷新,较大的值表示较少的刷新。 - q:退出
top
命令。在任何时候,按下q
键都可以退出top
命令,返回到命令行界面。
- s:修改屏幕刷新的时间间隔。按下
-
排序和过滤
- P:以CPU使用率对进程进行排序。这使得用户可以快速找到当前占用CPU最多的进程。
- M:以内存使用率对进程进行排序。对于查找内存使用异常高的进程非常有用。
- T:根据时间/累计时间对进程进行排序。可以了解哪些进程运行了最长的时间。
- o:过滤进程。按下
o
后,用户可以输入一个表达式来过滤显示的进程列表,只显示满足条件的进程。
-
显示选项
- t:切换显示任务及CPU信息。默认情况下,
top
会显示CPU的使用情况,但按下t
键后,可以隐藏或显示这部分信息。 - m:切换显示内存信息。类似于
t
键,m
键用于控制内存使用情况的显示。 - l:隐藏或显示uptime信息。uptime信息通常包括系统已运行的时间、登录用户数以及系统的平均负载。
- 1:显示每个CPU核心的详细信息。如果系统有多个CPU核心,按下
1
键后,top
会为每个核心单独显示一行信息。
- t:切换显示任务及CPU信息。默认情况下,
-
其他操作
- k:终止进程。通过按下
k
键,用户可以输入要终止的进程的PID(进程ID),并发送一个信号来终止该进程。默认使用的是SIGTERM(信号15),但也可以选择其他信号。 - r:修改进程优先级。虽然这不是
top
的直接功能,但用户可以通过top
找到进程的PID,然后使用renice
命令来修改其优先级。 - h:显示帮助信息。按下
h
键会列出所有可用的交互指令及其功能描述,帮助用户更好地使用top
命令。
- k:终止进程。通过按下
-
高级功能
- W:将当前的
top
配置写入~/.toprc
文件中。这样,下次启动top
时,它会自动加载这些配置。 - f:进入字段管理界面,允许用户自定义
top
命令的输出字段。用户可以选择显示或隐藏特定的列,以满足不同的监控需求。
- W:将当前的
pgrep命令-查看进程的信息
基础格式:
pgrep [options] <pattern>
其中,<pattern>
是你要搜索的进程名称或相关模式的字符串。pgrep会根据这个模式来搜索系统中正在运行的进程,并显示这些进程的ID。
常用选项(Markdown表格)
选项 | 描述 |
---|---|
-l , --list-name | 显示进程ID和进程名称,而不仅仅是进程ID。 |
-o , --oldest | 显示最旧的(启动时间最长的)匹配进程。 |
-n , --newest | 显示最新的(最后启动的)匹配进程。 |
-f , --full | 使用完整的命令行来匹配进程,而不仅仅是进程名。 |
-d , --delimiter | 设置用于分隔输出中每个进程ID的字符串(默认为换行符)。 |
-P , --parent | 只匹配指定父进程ID的进程。 |
-u , --euid | 匹配具有指定有效用户ID的进程。可以使用数值或符号值。 |
-U , --uid | 匹配具有指定实际用户ID的进程。可以使用数值或符号值。 |
-g , --pgroup | 只匹配指定进程组ID的进程。进程组0被转换为pgrep或pkill自己的进程组。 |
-G , --group | 只匹配具有指定实际组ID的进程。可以使用数值或符号值。 |
-v , --inverse | 反转匹配条件,即选择不匹配指定模式的进程。 |
-x , --exact | 完全匹配进程名。默认情况下,pgrep使用模糊匹配。 |
-c | 统计匹配进程的数量,而不是列出它们。 |
除了上述常用选项外,pgrep还提供了其他一些选项:
-s
,--session
:只匹配指定会话ID的进程。-t
,--terminal
:只匹配指定终端上的进程。-h
,--help
:显示帮助信息。-V
,--version
:显示pgrep的版本信息。
使用示例
-
显示指定进程名的进程ID:
pgrep bash
这会列出所有名为bash的进程的ID。
-
显示指定进程名的进程ID和名称:
pgrep -l bash
这会列出所有名为bash的进程的ID和名称。
-
选择并显示最新启动的bash进程:
pgrep -ln bash
使用
-l
显示进程名和ID,-n
选择最新的进程。 -
使用完整命令行匹配进程:
假设你想找到所有启动参数中包含-Xmx4g
的java进程,可以使用:pgrep -f '-Xmx4g'
这里
-f
选项使得pgrep能够基于完整的命令行参数来匹配进程。 -
反转匹配条件:
如果你想找到所有不是bash的进程,可以使用:pgrep -v bash
这里
-v
选项反转了匹配条件。
jobs命令
jobs
命令特别是在使用作业控制(job control)功能时。作业控制允许用户启动多个后台进程(即在后台运行的程序或命令),并在需要时暂停、恢复或终止这些进程。
基本用法
- 列出当前 shell 会话中的后台作业:
当你在 shell 中运行一个命令并在其后加上&
符号时,该命令将在后台执行。使用jobs
命令可以列出当前 shell 会话中所有正在运行或已停止的后台作业。jobs
- 显示作业的状态:
jobs
命令会显示每个作业的进程ID(PID)、作业号(Job Number)以及作业的状态(如运行中、已停止)。作业状态通常包括Running
(运行中)、Stopped
(已停止)等。
选项
选项 | 含义 |
---|---|
-l 或 --long | 以长格式显示作业信息,包括 PID。 |
-n | 仅显示最近一次通知状态发生变化的作业。 |
-p | 仅显示作业的 PID,不显示其他信息。 |
-r | 仅显示正在运行的作业。 |
-s | 仅显示已停止的作业。 |
示例
- 启动后台作业:
这个命令会让sleep 100 &
sleep
命令在后台运行,持续时间为 100 秒。 - 查看后台作业:
输出可能类似于:jobs
这里,[1]+ Running sleep 100 &
[1]+
是作业号,Running
是作业状态,sleep 100 &
是启动作业的命令。 - 停止和恢复作业:
你可以使用kill -STOP %作业号
命令来停止一个后台作业,使用fg %作业号
或bg %作业号
命令来将作业恢复到前台或继续在后台运行。kill -STOP %1 jobs # 然后使用 fg %1 或 bg %1 来恢复作业
jobs
命令是 shell 作业控制功能的重要组成部分,它提供了查看和管理后台作业的直接方式。
pstree命令-查看进程树
pstree
命令在Linux系统中是一个非常有用的工具,用于以树状图的形式显示进程之间的派生关系,帮助用户更好地了解系统中运行的进程以及它们之间的关系。
一、命令功能
pstree
以树状图显示系统中的进程关系,每个进程都被视为一个节点,通过连接线展示父子关系。- 它能清晰地表达程序间的相互关系,使用户能够直观地看到哪些进程是父进程,哪些是子进程。
二、命令语法
基本语法:
pstree [选项] [PID|USER]
- 如果不指定PID(进程ID)或USER(用户名),则会把系统启动时的第一个进程(通常是init或systemd)视为基层,并显示之后的所有进程。
- 若指定了用户名称,则会以隶属该用户的第一个程序作为基层,然后显示该用户的所有进程。
三、常用选项
-a
:显示每个程序的完整指令,包含路径、参数或是常驻服务的标示。-c
:不使用精简标示法,显示完整的进程名。-G
:使用VT100终端机的列绘图字符来绘制树状图。-h
:特别标明现在执行的程序。-H <程序识别码>
:特别标明指定的程序,与-h
类似但更具体。-l
:采用长列格式显示树状图,避免信息被截断。-n
:用程序识别码排序,而不是默认的以程序名称排序。-p
:显示程序识别码(PID),即进程ID。-u
:显示用户名称,每个进程后面都会显示其所属的用户。-U
:使用UTF-8列绘图字符来绘制树状图。-V
:显示版本信息。
四、示例
- 显示当前系统上所有进程的树状图(默认格式):
输出可能类似于:pstree
systemd─┬─NetworkManager─┬─dhclient│ ├─{NetworkManager}├─sshd───sshd───bash───pstree├─systemd-journal├─systemd-logind├─systemd-udevd└─tuned───4*[{tuned}]
- 显示每个程序的完整指令:
这将展示每个进程的完整命令行,包括路径和参数。pstree -a
- 显示进程的PID:
输出中会在每个进程名后面显示其PID,如pstree -p
systemd(1)─┬─NetworkManager(680)
。
4.以树状图的形式显示进程之间的派生关系,并且会附加显示每个进程的完整信息、用户名以及进程ID(PID)
五、注意
pstree
命令的输出可能因系统环境和当前运行的进程而异。- 在某些系统中,如果未安装
psmisc
包,则可能无法直接使用pstree
命令。此时,可以通过安装psmisc
包来获得pstree
命令。
pstree
命令是Linux系统管理和监控的重要工具之一,通过它,用户可以清晰地看到系统中进程之间的层次结构和关系,从而更好地理解和管理系统。
进程
进程的启动方式
在Linux系统中,进程的启动方式主要有以下几种:
1. 手工启动进程
手工启动进程指的是由用户通过输入命令直接启动一个进程。这种方式又可以细分为前台启动和后台启动两种方式:
- 前台启动:当用户输入一个命令并运行,该命令就会启动一个前台进程。此时,用户需要等待该进程执行完成或者手动将其放到后台运行,才能执行其他命令。
- 后台启动:为了不影响用户继续执行其他命令,可以将进程放到后台运行。这通常通过在命令的末尾添加
&
符号来实现,或者使用nohup
命令来在后台启动进程,并使其在用户注销后继续运行。
2. 调度启动进程
调度启动进程是指根据用户的设置,让进程在指定的时间、日期或者系统满足特定条件(如系统平均负载量低于指定值)时自动启动。Linux系统提供了多种工具来实现调度启动,包括crontab
、at
等。
- crontab:是一个用于设置周期性被执行的任务的工具。用户可以将需要定时执行的命令添加到crontab文件中,系统就会按照设定的时间间隔自动执行这些命令。
- at:允许用户安排一次性的任务在未来的某个时间点执行。与crontab相比,at更适合于只需要执行一次的任务。
3. 使用系统启动脚本
Linux系统中的大部分进程都是通过系统启动脚本进行启动的。这些启动脚本通常存储在/etc/init.d
(传统SysV初始化系统)或/etc/systemd/system
(systemd初始化系统)等目录下。用户可以使用service
(对于SysV)、systemctl
(对于systemd)等命令来管理这些启动脚本,从而控制相关进程的启动、停止和重启。
4. 使用systemd或Upstart
- systemd:是Linux系统中最新的初始化系统和服务管理器,用于替代传统的SysV初始化系统。它提供了强大的功能来启动、停止和管理系统进程,包括守护进程(daemon)、系统服务等。用户可以通过
systemctl
命令来管理systemd下的进程。 - Upstart:是一种事件驱动的初始化系统,它是Ubuntu等系统中默认的初始化系统之一。与systemd类似,Upstart也提供了启动、停止和管理系统进程的功能,但使用的是不同的配置文件和命令(如
initctl
)。
5. 编程方式启动
在编程中,也可以使用系统调用或库函数来启动新进程。例如,在C语言中,可以使用fork()
函数来创建一个新的子进程,然后使用exec()
系列函数来在子进程中执行新的程序。这种方式允许程序在运行时根据需要动态地启动其他进程。
进程的前后台调度
在Linux系统中,进程的前后台调度是进程管理的重要方面。前台进程是用户当前正在操作的进程,而后台进程则是在用户不直接干预的情况下运行的进程。以下是进程前后台调度相关的命令及它们的基础用法:
1. 前台到后台的调度
-
Ctrl+Z 组合键:
- 功能:将当前正在运行的前台进程挂起(即停止执行),并放入后台的任务列表中。此时,进程处于停止(Stopped)状态。
- 用法:在命令行中运行一个前台进程时,按下Ctrl+Z组合键即可将该进程挂起。
-
& 符号(用于启动时就放在后台):
- 功能:在命令的末尾添加
&
符号,可以使该命令在后台启动并执行。 - 用法:例如,
cp /dev/cdrom mycd.iso &
命令会在后台执行文件复制操作。
- 功能:在命令的末尾添加
2. 后台到前台的调度
-
fg 命令:
- 功能:将后台进程恢复到前台运行。可以指定任务序号来恢复特定的后台进程。
- 用法:
fg [任务序号]
。如果不指定任务序号,则默认恢复最近一个被挂起的后台进程。 - 示例:
fg 1
会将任务序号为1的后台进程恢复到前台运行。
-
jobs 命令:
- 功能:查看当前处于后台的任务列表。可以使用
-l
选项来显示任务的PID。 - 用法:
jobs [-l]
。 - 示例:
jobs
命令会列出所有后台任务及其状态,jobs -l
则会额外显示每个任务的PID。
- 功能:查看当前处于后台的任务列表。可以使用
3. 后台任务的持续运行
- nohup 命令:
- 功能:用于在用户注销或终端关闭后,继续运行相应的命令。它可以将命令的输出重定向到一个文件中,避免在终端关闭后无法查看命令的输出。
- 用法:
nohup 命令 &
。 - 示例:
nohup ./my_script.sh &
会在后台运行my_script.sh
脚本,并在用户注销或终端关闭后继续执行。
4. 注意
- 当使用
Ctrl+Z
将进程挂起后,可以使用bg
命令将进程放入后台继续执行,但通常这种用法较少见,因为&
符号在启动时就已经将进程置于后台。 fg
和bg
命令通常用于与Ctrl+Z
和&
配合使用,以实现更灵活的进程调度。nohup
命令特别适用于需要长时间运行且不希望被终端会话影响的命令。
终止进程的运行
1. kill命令
功能:kill
命令用于向一个或多个进程发送信号,通常用于终止进程。
用法:
- 终止指定PID的进程:
kill [信号] PID
。默认情况下,kill
命令发送SIGTERM(信号15)给进程,请求进程正常退出。如果进程不响应,可以使用-9
选项发送SIGKILL(信号9)强制终止进程,但这可能导致进程没有正确释放资源。
示例:
- 终止PID为1234的进程:
kill 1234
- 强制终止PID为1234的进程:
kill -9 1234
- 使用进程名(需要配合其他命令,如
pgrep
或pidof
来获取PID):由于kill
命令本身不直接支持通过进程名终止进程,但可以通过pgrep
或pidof
命令结合管道(|
)来实现。例如,kill $(pgrep firefox)
将终止所有名为firefox的进程。
2. killall命令
功能:killall
命令根据进程名来终止进程,与kill
命令不同,它不需要知道进程的PID。
用法:
- 终止指定名称的所有进程:
killall [信号] 进程名
。与kill
命令类似,默认情况下发送SIGTERM信号。
示例:
- 终止所有名为firefox的进程:
killall firefox
3. pkill命令
功能:pkill
命令也是根据进程名来终止进程,但它比killall
更灵活,支持使用正则表达式匹配进程名。
用法:
- 终止匹配指定模式的所有进程:
pkill [信号] [模式]
。
示例:
- 终止所有以chrome开头的进程:
pkill chrome
- 使用正则表达式终止进程(假设需要更复杂的匹配):
pkill -f 'pattern'
,其中-f
选项表示按照完整命令行来匹配进程。
4. 其他方法
- Ctrl+C:在终端中,使用Ctrl+C组合键可以终止当前前台运行的命令或进程。但这通常用于终止由用户启动的交互式进程。
- top或htop命令:这些命令提供了实时监视系统中进程和资源使用情况的功能。在
top
或htop
界面中,可以找到需要终止的进程的PID,然后使用kill
命令来终止它。htop
比top
提供了更友好的用户界面和更多的功能。 - systemctl命令:对于由systemd管理的服务,可以使用
systemctl stop 服务名
来停止服务。虽然这不是直接终止进程,但停止服务通常会终止与该服务相关的所有进程。
注意
- 终止进程前,请确保该进程是可以被安全终止的,以免造成数据丢失或系统不稳定。
- 某些进程可能由系统关键服务所依赖,终止这些进程可能会影响系统的正常运行。
- 在使用强制终止选项(如
kill -9
)时要特别小心,因为它可能导致进程没有正确释放资源。 - 对于图形界面应用程序,有时可能需要使用特定的工具或命令(如
xkill
)来终止。但xkill
主要用于在图形界面中通过鼠标点击来终止应用程序,而不是通过命令行。
at命令-计划任务管理
at-计划任务管理是Linux系统中一种用于设置一次性计划任务的功能。
一、基本概念
at命令允许用户在指定的时间执行一个指定的任务或脚本,且该任务只能执行一次。使用at命令前,需要确保系统已经开启了atd服务。
二、使用步骤
- 查看系统时间:
在设置at任务之前,首先需要查看当前的系统时间,以确保设置的执行时间是正确的。可以使用date
命令来查看系统时间。 - 设置at任务:
使用at
命令后,跟上指定的时间(可以是HH:MM格式的时间,也可以加上yyyy-mm-dd日期),然后回车进入at任务的编辑环境。在这个环境中,可以输入要执行的命令或脚本。输入完毕后,按Ctrl+D组合键提交任务。
示例:at 19:00 # 进入at任务编辑环境 echo "Hello, at task!" > /tmp/at_output.txt # 输入完毕后,按Ctrl+D提交任务
- 查看at任务列表:
使用atq
命令可以查看当前系统中所有未执行的at任务列表及其序号。 - 删除at任务:
如果需要删除某个at任务,可以使用atrm
命令加上任务序号来删除。
示例:atrm 1 # 假设任务序号为1
三、注意事项
- atd服务:
在使用at命令之前,需要确保系统的atd服务已经启动。如果服务未启动,可以通过系统服务管理工具(如systemctl、service等)来启动atd服务。 - 环境变量:
在at任务中执行的命令或脚本,可能会受到环境变量的影响。因此,在编写at任务时,需要注意环境变量的设置。如果脚本中使用了特定的环境变量,可能需要在脚本中显式地设置这些环境变量。 - 输出重定向:
由于at任务是在后台执行的,因此其输出可能不会直接显示在终端上。如果需要保存输出,可以使用输出重定向功能将输出保存到文件中。 - 权限问题:
默认情况下,普通用户可能无法直接使用at命令来设置任务。如果需要让普通用户使用at命令,可能需要调整系统的权限设置或使用sudo命令来提升权限。
四、应用场景
at-计划任务管理非常适合于需要一次性执行的任务场景,如系统维护、数据备份、定时关机等。通过at命令,用户可以方便地安排这些任务在指定的时间自动执行,从而节省时间和提高工作效率。
crontab命令-周期性计划任务管理
crontab的计划任务管理
crontab是Linux系统中用于设置周期性被执行的任务的工具。它允许用户按照自己的需求,设定在特定时间自动执行指定的命令或脚本。
一、crontab的配置格式
crontab的配置文件(通常为用户的crontab文件,而系统级别的crontab文件位于/etc/crontab
)中的每一行都代表一个定时任务,格式如下:
* * * * * user-name command to be executed
| | | | |
| | | | +---- Day of week (0 - 7) (Sunday=0 or 7)
| | | +------ Month of year (1 - 12)
| | +-------- Day of month (1 - 31)
| +---------- Hour (0 - 23)
+------------ Minute (0 - 59)
- Minute:分钟(0 - 59)
- Hour:小时(0 - 23)
- Day of month:一个月中的第几天(1 - 31)
- Month of year:月份(1 - 12)或使用月份的英文缩写(如Jan, Feb等)
- Day of week:一周中的第几天(0 - 7),其中0和7都代表星期日,或使用星期的英文缩写(如Sun, Mon等)
- user-name:执行命令的用户名称(可选,仅当
/etc/crontab
文件中定义任务时使用) - command to be executed:要执行的命令或脚本的绝对路径
二、crontab实例
以下是一些crontab任务设置的实例:
-
每天凌晨1点执行
database-backup
脚本:0 1 * * * /home/user/database-backup
-
每小时的第30分钟执行
check-system
命令:30 * * * * /usr/bin/check-system
-
每周一、三、五的上午8点到10点之间,每隔半小时执行
clean-logs
脚本:0,30 8-10 * * 1,3,5 /home/user/clean-logs
-
每月的1号和15号的凌晨12点执行
monthly-report
脚本:0 0 1,15 * * /home/user/monthly-report
-
每天的晚上11点到早上7点之间,每隔一小时重启smb服务:
0 23-7/1 * * * /etc/init.d/smb restart
注意:上面的命令可能需要根据你的系统(如使用systemd的系统)和服务管理器进行调整。例如,使用systemd的系统可能需要使用
systemctl restart smb
来重启服务。
三、crontab相关命令
-
编辑crontab文件:
crontab -e
- 这个命令会打开一个编辑器(通常是系统默认的文本编辑器),让用户可以添加、修改或删除定时任务。
-
查看当前用户的crontab条目:
crontab -l
- 这个命令会列出当前用户所有的crontab条目。
-
删除当前用户的crontab文件:
crontab -r
- 这个命令会删除当前用户的crontab文件,即删除所有定时任务。
-
查看指定用户的crontab条目(需要root权限):
crontab -u 用户名 -l
- 这个命令允许root用户查看其他用户的crontab条目。