本篇对一些深层的进程管理命令和计划任务管理命令讲解。熟练灵活使用这些命令可以帮助我们高效管理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