本篇对一些深层的进程管理命令和计划任务管理命令讲解。熟练灵活使用这些命令可以帮助我们高效管理Linux系统。
功能:列出系统中所有用户的所有进程,包括没有控制终端的进程。
注意:没有横杠“-”
命令
ps aux 常用选项
输出示例
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.3 128560 7288 ? Ss 08:12 0:02 /usr/lib/sy root 2 0.0 0.0 0 0 ? S 08:12 0:00 [kthreadd] root 4 0.0 0.0 0 0 ? S< 08:12 0:00 [kworker/0: 各列的解释
功能:以长格式列出系统中所有进程的详细信息。
注意:有横杠“-”
命令
ps -elf 常用选项
其他选项
输出示例
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD 4 S root 1 0 0 80 0 - 32140 ep_pol 08:12 ? 00:00:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22 1 S root 2 0 0 80 0 - 0 kthrea 08:12 ? 00:00:00 [kthreadd] 各列的解释
是一个用于实时监控系统运行状态的工具,主要用于查看系统中正在运行的进程和系统资源的使用情况。提供了动态的、实时更新的系统状态视图,包括 CPU、内存、交换空间、进程等信息。
特点
格式
top [选项 常用选项
示例
显示系统状态
启动 top 命令并显示系统的实时进程列表和资源使用情况。
top 每 5 秒刷新一次
设置 top 每 5 秒刷新一次显示内容。
top -d 5 仅显示指定用户的进程
显示指定用户的所有进程。
top -u username 以批处理模式输出
这会以批处理模式运行 top 并将输出保存到 top_output.txt 文件中,-n 1 表示只显示一次。
top -b -n 1 > top_output.txt 直接输入top的输出示例
top - 11:43:32 up 3:31, 1 user, load average: 0.00, 0.01, 0.05 Tasks: 221 total, 1 running, 220 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.2 us, 0.2 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 1863028 total, 908312 free, 517828 used, 436888 buff/cache KiB Swap: 4194300 total, 4194300 free, 0 used. 1169832 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 31676 root 20 0 162200 2368 1580 R 0.7 0.1 0:00.06 top 491 root 20 0 0 0 0 S 0.3 0.0 0:18.39 xfsail+ 978 root 20 0 295564 5308 4036 S 0.3 0.3 0:54.27 vmtool+ 行的解释
第一行 - 任务队列信息
| 11:06:48 | 系统时间 |
|---|---|
| up 1:22 | 系统已运行时长 |
| 1 user | 当前登录用户数 |
| load average: 0.06, 0.60, 0.48 | 系统负载 |
注:1. 系统处理的任务数,分别为1分钟、5分钟、15分钟前的平均值 2.禁止登录的看不到,如(/sbin/nologin)
第二行 - 进程信息
| Tasks | 总进程数 |
|---|---|
| running | 正在运行的进程数 |
| sleeping | 休眠的进程数 |
| stopped | 中止的进程数 |
| zombie | 僵死的进程数 |
第三行 - CPU的信息
| us | 用户占用 |
|---|---|
| sy | 内核占用 |
| ni | 优先级调度占用 |
| id | 空闲CPU |
| wa | I/O 等待占用 |
| hi | 硬件中断占用 |
| si | 软件中断占用 |
| st | 虚拟化占用 |
注:I/O速度大,CPU空闲率低意味着系统繁忙
第四行 - 内存的信息
| total | 总内存空间 |
|---|---|
| free | 空闲内存 |
| used | 已用内存 |
| buff/cache | 缓冲区总和 |
第五行 - 交换空间的信息
| total | 总交换空间 |
|---|---|
| free | 空闲交换空间 |
| used | 已用交换空间 |
| avail Mem | 可用物理空间 |
进程信息区各列解释
top交互界面常用指令
用于在系统中查找正在运行的进程。通过进程名称或其他属性搜索并返回符合条件的进程ID,简化了在复杂系统中查找特定进程的操作。
格式
pgrep [选项] 模式 常用选项
其他选项
示例
查找进程名称中包含 “bash” 的所有进程ID:
pgrep bash 显示进程名称和ID:
pgrep -l bash 查找属于特定用户的进程:
pgrep -u user1 bash 统计匹配的进程数量:
pgrep -c bash 使用完整的命令行匹配:
pgrep -f "/usr/bin/python" 查找特定父进程ID的子进程:
pgrep -P 1234 用于显示当前 shell 会话中后台作业状态的命令。列出正在运行的所有后台作业及其状态,如运行中、停止或已结束,方便用户管理和控制这些作业。
格式
jobs [选项] 常用选项
示例
显示当前所有后台作业及其状态:
jobs 显示作业号和进程ID:
jobs -l lsof(List Open Files)是一个用于列出当前系统中打开文件和端口的工具。它可以显示有关所有打开的文件的信息,包括文件名、进程 ID、进程名称、文件描述符、文件类型等。用于跟踪文件和网络连接,诊断系统问题等。
特点
格式
lsof [选项] [参数] 常用选项
示例
显示所有打开的文件
lsof 列出系统中所有打开的文件及其相关信息。
显示特定进程的打开文件
lsof -p 1234 列出进程 ID 为 1234 的所有打开文件。
显示特定用户的打开文件
lsof -u username 列出指定用户(例如 username)的所有打开文件。
显示特定目录下的所有打开文件
lsof +D /var/log 递归显示 /var/log 目录及其子目录下的所有打开文件。
显示特定端口的网络连接
lsof -i :80 显示所有正在使用端口 80 的网络连接。
显示所有 TCP 连接
lsof -i tcp 显示所有 TCP 连接。
显示进程打开的文件而不显示标题信息
lsof -t -p 1234 显示进程 ID 为 1234 的所有打开文件的文件描述符,不显示其他详细信息。
输出字段说明
cwd 表示当前工作目录,txt 表示程序代码,mem 表示内存映射文件等)。REG 表示常规文件,DIR 表示目录,CHR表示字符设备,FIFO 表示 FIFO 文件等)。在 Linux 系统中,用户可以通过前后台调度来控制进程的执行方式。进程可以在前台运行,直接与用户交互,或者在后台运行,允许用户在终端中继续其他操作。
示例说明
vim 111 会启动 vim 编辑器并在前台运行。Ctrl+Z。vim 111 运行时按 Ctrl+Z,进程会被挂起,并显示为停止状态。jobs 命令查看当前终端中的所有后台作业。jobs -l 显示后台作业列表,包括每个作业的进程 ID 和状态。pgrep 命令可以根据进程名获取进程 ID。pgrep -l "vim" 可以显示所有名为 vim 的进程及其进程 ID。kill 命令可以通过进程 ID 或名称终止进程。kill -9 <进程ID> 强制终止指定进程。& 可以让进程在后台运行。cp -r /mnt /opt/ & 会将复制操作在后台执行。用于终止进程的命令行工具。它可以通过发送信号来控制或终止指定的进程。在 Unix 和 Linux 系统中,进程可以接收不同的信号,每个信号对应不同的操作,例如终止、挂起或重新加载进程。
格式
kill [选项] <进程ID> 常用选项
示例
正常终止进程
kill 1234 发送默认的 SIGTERM 信号来请求进程 1234 终止。
强制终止进程
kill -9 1234 发送 SIGKILL 信号,强制终止进程 1234。
重启进程
kill -HUP 1234 发送 SIGHUP 信号,通常用于重新加载进程的配置文件而不终止进程。
注意事项
SIGKILL 的使用: SIGKILL 是一个不可捕获、不可忽略的信号,用于强制终止进程。使用 kill -9 时,应谨慎,因为它会立即终止进程,而不执行任何清理操作。kill -(负数)来终止整个进程组。根据进程的层级关系,以树状结构显示进程信息。每个分支表示一个进程及其派生出的子进程。它可以帮助用户更直观地了解进程的父子关系。后面可以连接管道符筛选。
格式
pstree [选项] [PID或用户名] 常用选项
示例
显示用户名、PID号和完整信息:
pstree -aup 只查看属于指定用户的进程树结构:
pstree -ap teacher 前台启动:用户输入命令,直接执行程序
后台启动:在命令行尾加入”&”符号
示例:
[root@localhost ~]#cp /dev/cdrom mycd.iso & [1] 28454 解释:输出信息中包括后台任务序号、PID号
将当前进程挂起,即调入后台并停止执行
jobs [-l] 查看处于后台的任务列表
将后台进程恢复到前台运行,可指定任务序号
示例:
[root@localhost ~]# jobs [1]- Stopped cp /dev/cdrom mycd.iso [2]+ Stopped top [root@localhost ~]# fg 1 中断正在执行的命令
kill 用于终止指定PID号的进程
killall 用于终止指定名称相关的所有进程
-9 选项用于强制终止
根据特定条件终止相应的进程
常用命令选项
-U:根据进程所属的用户名终止相应进程
-t:根据进程所在的终端终止相应进程
[root@localhost ~]# pgrep -l -U "teacher" 3045 bash [root@localhost ~]# pkill -9 -U "teacher" [root@localhost ~]# pgrep -l -U "teacher" 用于在指定的未来时间执行一次性任务的工具。与 cron 不同,at 任务仅执行一次,不会定期重复,适合安排一次性任务。允许用户在指定的时间安排执行特定的命令或脚本。
格式
at [选项] TIME TIME格式:[HH:MM] [yyyy-mm-dd]
在命交互式界面下,Ctrl+D提交任务
常用选项
TIME 参数
TIME 是指定任务执行的时间,可以使用多种格式,如:
HH:MM:表示当天的某个时间。noon、midnight、teatime:特殊时间点,分别表示中午、午夜、下午4点。now + 1 hour:当前时间的基础上增加一段时间。MMDDYY 或 DD.MM.YY:指定某年某月某日。示例
在下午2:30执行一个任务:
echo "backup.sh" | at 14:30 将在当天下午2:30执行 backup.sh 脚本。
查看待执行的 at 任务:
atq 显示当前用户已安排的所有 at 任务。
删除一个任务:
atrm 3 删除任务队列中 ID 为 3 的 at 任务。
指定任务执行时间为明天早上9点:
echo "echo 'Good morning'" | at 9:00 AM tomorrow 这将在第二天上午9点输出 “Good morning”。
从文件中读取任务:
at -f /path/to/script.sh now + 1 hour 在一小时后执行 script.sh 文件中的所有命令。
注意事项
at 任务的输出(如果有)默认会通过电子邮件发送给用户,除非明确重定向到其他地方或使用 m 选项。at 任务仅在系统时间到达指定时间时执行,因此必须确保系统时钟准确无误。crontab 工具使用一个称为 cron 的后台服务来运行定期任务。crontab 文件中包含了任务调度信息和相应的命令,每一行代表一个定时任务。任务可以按照分钟、小时、天、月、星期的组合来调度。
按照预先设置的时间周期(分钟、小时、天、月、周)重
复执行用户指定的命令操作。属于周期性计划任务。
全局配置文件,位于文件:/etc/crontab
系统默认的设置,位于目录:/etc/cron.*/
用户定义的设置,位于文件:/var/spool/cron/用户名
crontab -e [-u 用户名] 注:-u缺省时默认是针对当前用户
crontab -e [-u 用户名] crontab -e [-u 用户名] crontab -l -u crontab -r -u 其他常用命令
crontab -e:编辑当前用户的 crontab 文件。crontab -l:列出当前用户的 crontab 文件内容。crontab -r:删除当前用户的 crontab 文件,移除所有定时任务。crontab -u username -e:编辑指定用户的 crontab 文件(需要管理员权限)。crontab任务配置的格式,在crontab文件中添加行配置
* * * * * command 注:
字段说明
| 字段 | 说明 |
|---|---|
| 分钟 | 取值为从 0 到 59 之间的任意整数 |
| 小时 | 取值为从 0 到 23 之间的任意整数 |
| 日期 | 取值为从 1 到 31 之间的任意整数 |
| 月份 | 取值为从 1 到 12 之间的任意整数 |
| 星期 | 取值为从 0 到 7 之间的任意整数,0 或 7 代表星期日 |
| 命令 | 要执行的命令或程序脚本 |
时间数值的特殊表示方法
应用示例
| 时间设置 | 说明 |
|---|---|
| 0 17 * * 1-5 | 周一到周五每天 17:00 |
| 30 8 * * 1,3,5 | 每周一、三、五的 8:30 |
| 0 8-18/2 * * * | 8 点到 18 点之间每 2 小时 |
| 0 * */3 * * | 每 3 天 |
示例
每2个月的第2个星期三的18:30,假设每个月的第一天都是星期一
30 18 8-14 */2 3