Linux进程和计划任务管理的相关命令



本篇对一些深层的进程管理命令和计划任务管理命令讲解。熟练灵活使用这些命令可以帮助我们高效管理Linux系统。

1查看静态的进程统计信息-ps

1. ps aux

功能:列出系统中所有用户的所有进程,包括没有控制终端的进程。

注意:没有横杠“-”

命令

ps aux

常用选项

  • a:显示现行终端下的所有进程,包括其它用户的进程。
  • u:显示进程的归属用户及资源等的使用情况。
  • x:显示所有进程,包括没有控制终端的进程。
  • h:不显示标题列。在需要更紧凑输出的情况下有用。

输出示例

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:

各列的解释

  • USER:进程的用户。
  • PID:进程的ID。
  • %CPU:进程占用的CPU百分比。
  • %MEM:占用内存的百分比。
  • VSZ:该进程使用的虚拟内存量(KB)。
  • RSS:该进程占用的物理内存量(KB)。
  • TTY:启动进程的终端名。不是从终端启动的进程则显示为:?
  • STAT:该行程的状态(D:不可中断的休眠状态;R:正在运行状态;S:处于休眠状态,可被唤醒;T:停
    止状态,可能是在后台暂停或进程处于跟踪调试状态;Z:僵尸进程,进程已经中止,但是部分程序还在内存
    当中)。
  • START:该进程被触发启动时间。
  • TIME:该进程实际使用CPU运行的时间。(大部分运行时间快所以显示0:00)
  • COMMAND:进程的启动命令(名称与参数)。

2. ps -elf

功能:以长格式列出系统中所有进程的详细信息。

注意:有横杠“-”

命令

ps -elf

常用选项

  • -e:显示系统内的所有进程信息。
  • -l:使用长格式显示进程信息。
  • -f:使用完整的格式显示进程信息。

其他选项

  • -a:显示现行终端下的所有进程。
  • -T:查看线程信息。
  • -C <进程名称>:显示指定进程名的信息。
  • -p <进程pid>:显示指定pid的进程的信息。
  • -H:显示树状结构,表示进程间的相互关系。
  • –no-headers:不显示标题列。

输出示例

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]

各列的解释

  • F:内核分配给进程的系统标记。
  • S:进程的状态(D:不可中断的休眠状态;R:正在运行状态;S:处于休眠状态,可被唤醒;T:停
    止状态,可能是在后台暂停或进程处于跟踪调试状态;Z:僵尸进程,进程已经中止,但是部分程序还在内存
    当中)。
  • UID:启动这些进程的用户。
  • PID:进程的进程ID。(0为没有父进程)
  • PPID:父进程的进程号(如果该进程是由另一个进程启动的)。
  • C:进程生命周期中的CPU利用率。
  • PRI:进程的优先级(越大的数字代表越低的优先级)。
  • NI:谦让度值用来参与决定优先级。
  • ADDR:进程的内存地址。
  • SZ:假如进程被换出,所需交换空间的大致大小。表示进程当前占用的虚拟内存大小。
  • WCHAN:若该进程在睡眠,则显示睡眠中的系统函数名。
  • STIME:进程启动时的系统时间。
  • TTY:进程启动时的终端设备。(拓展:表示一个终端PTS/1)
  • TIME:运行进程需要的累计CPU时间。
  • CMD:进程的启动命令。

2查看动态的进程统计信息-top

是一个用于实时监控系统运行状态的工具,主要用于查看系统中正在运行的进程和系统资源的使用情况。提供了动态的、实时更新的系统状态视图,包括 CPU、内存、交换空间、进程等信息。

特点

  • 可以显示系统中所有进程的信息,包括 CPU 和内存使用情况。
  • 提供了一个交互式的界面,可以对进程进行排序、筛选和操作。

格式

top [选项

常用选项

  • -d <时间>:设置更新间隔时间,单位为秒。如:-d 5 每 5 秒刷新一次。
  • -n <次数>:设置更新次数。如:-n 10 只显示 10 次更新。
  • -b:以批处理模式运行,适合将输出重定向到文件。
  • -u <用户>:仅显示指定用户的进程。
  • -p :仅显示指定 PID 的进程。
  • -H:显示所有线程
  • -H -p :显示特定进程中的线程

示例

  1. 显示系统状态

    启动 top 命令并显示系统的实时进程列表和资源使用情况。

    top
    
  2. 每 5 秒刷新一次

    设置 top 每 5 秒刷新一次显示内容。

    top -d 5
    
  3. 仅显示指定用户的进程

    显示指定用户的所有进程。

    top -u username
    
  4. 以批处理模式输出

    这会以批处理模式运行 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
waI/O 等待占用
hi硬件中断占用
si软件中断占用
st虚拟化占用

:I/O速度大,CPU空闲率低意味着系统繁忙

第四行 - 内存的信息

total总内存空间
free空闲内存
used已用内存
buff/cache缓冲区总和

第五行 - 交换空间的信息

total总交换空间
free空闲交换空间
used已用交换空间
avail Mem可用物理空间

进程信息区各列解释

  • PID 进程id
  • USER 进程所有者的用户名
  • PR 优先级
  • NI 谦让度值,负值表示高优先级,正值表示低优先级
  • VIRT 进程使用的虚拟内存总量,单位kb
  • RES 进程使用的物理内存大小,单位kb
  • SHR 共享内存大小,单位kb
  • S 进程状态
  • %CPU 上次更新到现在的CPU时间占用百分比
  • %MEM 进程使用的物理内存百分比
  • TIME+ 进程使用的CPU时间总计,单位1/100秒
  • COMMAND 命令名/命令行

top交互界面常用指令

  • P 键:根据CPU使用百分比大小进行排序
  • M 键:根据驻留内存大小进行排序
  • N 键:根据启动时间进行排序
  • c 键:切换显示命令名称和完整命令行**(常用)**
  • h 键:可以获得 top程序的在线帮助信息
  • k 键:根据提示输入指定进程的 PID 号并按 Enter 键终止对应的进程
  • q 键:退出 top 程序**(常用)**
  • 数字1 键:显示CPU个数和状态**(常用)**

3查看进程信息-pgrep

用于在系统中查找正在运行的进程。通过进程名称或其他属性搜索并返回符合条件的进程ID,简化了在复杂系统中查找特定进程的操作。

格式

pgrep [选项] 模式
  • 模式: 用于匹配进程名称的正则表达式。

常用选项

  • -a:显示进程名和PID。
  • -c:仅显示匹配进程的数量,而不显示进程名和PID。
  • -f:匹配进程名及其参数。

其他选项

  • -l: 显示匹配的进程名称和进程ID
  • -u 用户名: 只显示由指定用户拥有的进程。
  • -f: 使用完整的命令行来匹配,而不仅仅是进程名称。
  • -c: 统计匹配进程的数量,而不是列出它们。
  • -d 分隔符: 使用指定的分隔符分隔输出的进程ID。
  • -v: 反向匹配,显示不符合条件的进程ID。
  • -P 父进程ID: 显示属于指定父进程的子进程。

示例

  1. 查找进程名称中包含 “bash” 的所有进程ID:

    pgrep bash
    
  2. 显示进程名称和ID:

    pgrep -l bash
    
  3. 查找属于特定用户的进程:

    pgrep -u user1 bash
    
  4. 统计匹配的进程数量:

    pgrep -c bash
    
  5. 使用完整的命令行匹配:

    pgrep -f "/usr/bin/python"
    
  6. 查找特定父进程ID的子进程:

    pgrep -P 1234
    

4列出后台作业状态信息-jobs

用于显示当前 shell 会话中后台作业状态的命令。列出正在运行的所有后台作业及其状态,如运行中、停止或已结束,方便用户管理和控制这些作业。

格式

jobs [选项]

常用选项

  • -l: 显示作业号和对应的进程ID。
  • -n: 仅显示最近发生状态变化的作业。
  • -p: 仅显示作业的进程ID。
  • -r: 仅显示正在运行的作业。
  • -s: 仅显示已停止的作业。

示例

  1. 显示当前所有后台作业及其状态:

    jobs
    
  2. 显示作业号和进程ID:

    jobs -l
    

5列出打开的文件和端口信息-lsof

lsof(List Open Files)是一个用于列出当前系统中打开文件和端口的工具。它可以显示有关所有打开的文件的信息,包括文件名、进程 ID、进程名称、文件描述符、文件类型等。用于跟踪文件和网络连接,诊断系统问题等。

特点

  • 主要用于查看系统中所有打开的文件及其相关信息。
  • 可以用来检查哪些进程正在使用某些文件,或哪些文件正在被特定进程使用。

格式

lsof [选项] [参数]

常用选项

  • -i [协议][端口号]:显示指定协议(如 tcp、udp)和端口号的网络连接。可以省略协议和端口号以显示所有网络连接。
  • -u [用户名]:显示指定用户的所有打开文件。
  • -p [PID]:显示指定进程 ID 的所有打开文件。
  • +D [目录]:递归显示指定目录下所有打开的文件。
  • -c [命令名]:显示指定命令的所有打开文件。
  • -t:仅显示文件描述符,不显示头部信息。
  • -n:以数字形式显示网络地址和端口号,避免进行 DNS 解析。
  • -h:显示帮助信息。

示例

  1. 显示所有打开的文件

    lsof
    

    列出系统中所有打开的文件及其相关信息。

  2. 显示特定进程的打开文件

    lsof -p 1234
    

    列出进程 ID 为 1234 的所有打开文件。

  3. 显示特定用户的打开文件

    lsof -u username
    

    列出指定用户(例如 username)的所有打开文件。

  4. 显示特定目录下的所有打开文件

    lsof +D /var/log
    

    递归显示 /var/log 目录及其子目录下的所有打开文件。

  5. 显示特定端口的网络连接

    lsof -i :80
    

    显示所有正在使用端口 80 的网络连接。

  6. 显示所有 TCP 连接

    lsof -i tcp
    

    显示所有 TCP 连接。

  7. 显示进程打开的文件而不显示标题信息

    lsof -t -p 1234
    

    显示进程 ID 为 1234 的所有打开文件的文件描述符,不显示其他详细信息。

输出字段说明

  • COMMAND:进程的命令名。
  • PID:进程 ID。
  • USER:文件的所有者用户名。
  • FD:文件描述符,显示文件的访问模式(如 cwd 表示当前工作目录,txt 表示程序代码,mem 表示内存映射文件等)。
  • TYPE:文件类型(如 REG 表示常规文件,DIR 表示目录,CHR表示字符设备,FIFO 表示 FIFO 文件等)。
  • DEVICE:设备号。
  • SIZE/OFF:文件的大小或偏移量。
  • NODE:文件的节点号(仅适用于本地文件系统)。
  • NAME:文件的名称或路径。

6实例:进程的前后台调度

在 Linux 系统中,用户可以通过前后台调度来控制进程的执行方式。进程可以在前台运行,直接与用户交互,或者在后台运行,允许用户在终端中继续其他操作。

示例说明

  1. 前台运行:
    • 运行命令时,默认情况下进程在前台运行,用户可以直接与其交互。
    • 例如:vim 111 会启动 vim 编辑器并在前台运行。
  2. 将进程放到后台并停止运行:
    • 将一个正在前台运行的进程移到后台并暂停时,可以使用 Ctrl+Z
    • 例如:在 vim 111 运行时按 Ctrl+Z,进程会被挂起,并显示为停止状态。
  3. 查看后台作业:
    • 使用 jobs 命令查看当前终端中的所有后台作业。
    • 例如:jobs -l 显示后台作业列表,包括每个作业的进程 ID 和状态。
  4. 通过进程名获取进程 ID:
    • 使用 pgrep 命令可以根据进程名获取进程 ID。
    • 例如:pgrep -l "vim" 可以显示所有名为 vim 的进程及其进程 ID。
  5. 终止进程:
    • 使用 kill 命令可以通过进程 ID 或名称终止进程。
    • 例如:kill -9 <进程ID> 强制终止指定进程。
  6. 后台运行进程:
    • 在命令末尾添加 & 可以让进程在后台运行。
    • 例如:cp -r /mnt /opt/ & 会将复制操作在后台执行。

7终止(杀死)进程-kill

用于终止进程的命令行工具。它可以通过发送信号来控制或终止指定的进程。在 Unix 和 Linux 系统中,进程可以接收不同的信号,每个信号对应不同的操作,例如终止、挂起或重新加载进程。

格式

kill [选项] <进程ID>

常用选项

  • -l: 列出所有信号名称。
  • -s <信号>: 发送指定信号(默认为 TERM,即终止进程)。
  • -9: 强制终止进程(发送 SIGKILL 信号,无法被捕捉或忽略)。
  • -15: 发送 SIGTERM 信号,要求进程正常终止(这是默认的信号)。
  • -HUP: 发送 SIGHUP 信号,通常用于重新加载进程的配置文件。

示例

  1. 正常终止进程

    kill 1234
    

    发送默认的 SIGTERM 信号来请求进程 1234 终止。

  2. 强制终止进程

    kill -9 1234
    

    发送 SIGKILL 信号,强制终止进程 1234。

  3. 重启进程

    kill -HUP 1234
    

    发送 SIGHUP 信号,通常用于重新加载进程的配置文件而不终止进程。

注意事项

  • 权限要求: 只有进程的所有者或超级用户可以发送信号给进程。
  • SIGKILL 的使用: SIGKILL 是一个不可捕获、不可忽略的信号,用于强制终止进程。使用 kill -9 时,应谨慎,因为它会立即终止进程,而不执行任何清理操作。
  • 进程组终止:可以用 kill -<PID>(负数)来终止整个进程组。

8查看进程树-pstree

根据进程的层级关系,以树状结构显示进程信息。每个分支表示一个进程及其派生出的子进程。它可以帮助用户更直观地了解进程的父子关系。后面可以连接管道符筛选。

格式

pstree [选项] [PID或用户名]

常用选项

  • -p:显示每个进程的 PID(进程 ID)。
  • -u:显示进程的所属用户。
  • -a:显示每个进程的完整命令行,包括其所有参数。
  • -h:高亮显示当前进程及其父进程。
  • -n:按 PID 顺序排列进程。
  • -G:使用 ASCII 图形字符显示树结构,而不是默认的线条。

示例

  1. 显示用户名、PID号和完整信息

    pstree -aup
    
  2. 只查看属于指定用户的进程树结构

    pstree -ap teacher
    

9进程的启动方式

手工启动

  • 前台启动:用户输入命令,直接执行程序

  • 后台启动:在命令行尾加入”&”符号

    示例:

    [root@localhost ~]#cp /dev/cdrom mycd.iso &
    [1] 28454
    

    解释:输出信息中包括后台任务序号、PID号

调度启动

  • 使用at命令,设置一次性计划任务
  • 使用crontab命令,设置周期性计划任务

10进程的前台调度

Ctrl+Z组合键

将当前进程挂起,即调入后台并停止执行

jobs命令

jobs [-l] 查看处于后台的任务列表

fg命令

将后台进程恢复到前台运行,可指定任务序号

示例:

[root@localhost ~]# jobs
[1]- Stopped       cp /dev/cdrom mycd.iso
[2]+ Stopped       top
[root@localhost ~]# fg 1

11终止进程的运行

Ctrl+C组合键

中断正在执行的命令

kill、killall命令

kill 用于终止指定PID号的进程

killall 用于终止指定名称相关的所有进程

-9 选项用于强制终止

pkill命令

根据特定条件终止相应的进程

常用命令选项

  • -U:根据进程所属的用户名终止相应进程

  • -t:根据进程所在的终端终止相应进程

    [root@localhost ~]# pgrep -l -U "teacher"
    3045 bash
    [root@localhost ~]# pkill -9 -U "teacher"
    [root@localhost ~]# pgrep -l -U "teacher"
    

12一次性计划任务-at

用于在指定的未来时间执行一次性任务的工具。与 cron 不同,at 任务仅执行一次,不会定期重复,适合安排一次性任务。允许用户在指定的时间安排执行特定的命令或脚本。

格式

at [选项] TIME

TIME格式:[HH:MM] [yyyy-mm-dd]

在命交互式界面下,Ctrl+D提交任务

常用选项

  • -l 或 atq:列出当前用户的所有待执行 at 任务。
  • -d 或 atrm:删除一个 at 任务,可以通过任务 ID 来指定。
  • -m:任务完成后发送邮件给用户,报告任务的执行结果。
  • -f:从指定文件读取要执行的命令。

TIME 参数

TIME 是指定任务执行的时间,可以使用多种格式,如:

  • HH:MM:表示当天的某个时间。
  • noonmidnightteatime:特殊时间点,分别表示中午、午夜、下午4点。
  • now + 1 hour:当前时间的基础上增加一段时间。
  • MMDDYYDD.MM.YY:指定某年某月某日。

示例

  1. 在下午2:30执行一个任务

    echo "backup.sh" | at 14:30
    

    将在当天下午2:30执行 backup.sh 脚本。

  2. 查看待执行的 at 任务

    atq
    

    显示当前用户已安排的所有 at 任务。

  3. 删除一个任务

    atrm 3
    

    删除任务队列中 ID 为 3 的 at 任务。

  4. 指定任务执行时间为明天早上9点

    echo "echo 'Good morning'" | at 9:00 AM tomorrow
    

    这将在第二天上午9点输出 “Good morning”。

  5. 从文件中读取任务

    at -f /path/to/script.sh now + 1 hour
    

    在一小时后执行 script.sh 文件中的所有命令。

注意事项

  • at 任务的输出(如果有)默认会通过电子邮件发送给用户,除非明确重定向到其他地方或使用 m 选项。
  • at 任务仅在系统时间到达指定时间时执行,因此必须确保系统时钟准确无误。

14周期性计划任务-crontab

crontab 工具使用一个称为 cron 的后台服务来运行定期任务。crontab 文件中包含了任务调度信息和相应的命令,每一行代表一个定时任务。任务可以按照分钟、小时、天、月、星期的组合来调度。

按照预先设置的时间周期(分钟、小时、天、月、周)重
复执行用户指定的命令操作。属于周期性计划任务。

主要设置文件

全局配置文件,位于文件:/etc/crontab

系统默认的设置,位于目录:/etc/cron.*/

用户定义的设置,位于文件:/var/spool/cron/用户名

常用命令格式

  1. 编辑crontab计划任务
crontab -e [-u 用户名]

注:-u缺省时默认是针对当前用户

  1. 查看计划任务
crontab -e [-u 用户名]
  1. 删除计划任务
crontab -e [-u 用户名]
  1. 展示当前设定的定时任务
crontab -l -u
  1. 删除所有定时任务(慎重)
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

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值