• 09-进程和计划任务管理


    9.1查看和控制进程

    9.1.1 查看进程

    1.ps命令

    pS 命令是 Linux 操作系统中最为常用的进程查看工具,主要用于显示包含当前运行的各进程完整信息的静态快照。通过不同的命令选项,可以有选择性地查看进程信息。

    命令

    作用

    a

    显示当前终端下的所有进程信息,包括其他用户的进程。

    u

    使用以用户为主的格式输出进程信息

    x

    显示当前用户在所有终端下的进程信息

    e

    显示系统内所有进程信息

    I

    使用长格式显示进程信息

    f

    使用完整的(Full)格式显示进程信息

    1 BSD风格(free BSD)
    1. # ps au 命令的输出结果解释  
    2. # USER: 进程的所有者(用户)  
    3. # PID: 进程ID(Process ID),唯一标识一个进程  
    4. # %CPU: 进程占用的CPU百分比  
    5. # %MEM: 进程占用的物理内存百分比  
    6. # VSZ: 进程使用的虚拟内存大小(KB)  
    7. # RSS: 进程使用的物理内存大小(KB)  
    8. # TTY: 进程使用的终端类型  
    9. # STAT: 进程状态(例如 S=休眠, R=运行, Z=僵尸, T=停止, I=空闲)  
    10. # START: 进程启动时间  
    11. # TIME: 进程使用的CPU时间(分钟:秒)  
    12. # COMMAND: 启动进程的命令或程序名  
    13. # 示例输出:  
    14. [root@localhost ~]# ps au
    15. USER        PID  %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND  
    16. root        834  0.0  0.1 110220 1696 tty1     Ss+ 13:56   0:00 /sbin/agetty --noclear tty1 linux  
    17. root       1432  0.0  0.3 115692 3460 pts/0    Ss   13:56   0:00 -bash  
    18. root       1459  0.0  0.3 115560 3464 pts/1    Ss+  13:58   0:00 -bash  
    19. root       1525  0.0  0.3 155464 3776 pts/0    R+   14:21   0:00 ps au
    2.Unix(风格)
    1. # 字段解释  
    2. # F: 进程标志(通常表示进程类型,如普通进程(S)、内核线程(I)等)  
    3. # S: 进程状态(如 S=休眠, R=运行, I=空闲, Z=僵尸等)  
    4. # UID: 用户ID(通常是进程所有者的用户ID)  
    5. # PID: 进程ID(每个进程唯一的标识)  
    6. # PPID: 父进程ID(创建该进程的进程ID)  
    7. # C: CPU使用率(进程使用的CPU时间百分比,近似值)  
    8. # PRI: 优先级(内核调度的优先级)  
    9. # NI: nice值(调整CPU调度的优先级)  
    10. # ADDR: 进程的内存地址(内核空间地址)  
    11. # SZ: 进程使用的内存大小(KB)  
    12. # WCHAN: 进程等待的通道(进程当前睡眠的内核函数名)  
    13. # STIME: 进程启动时间  
    14. # TTY: 进程关联的终端类型(如果适用)  
    15. # TIME: 进程使用的CPU时间(累计)  
    16. # CMD: 启动进程的命令或程序名  
    17.   
    18. # 示例输出  
    19. [root@localhost ~]# ps -elf
    20. F S UID         PID   PPID  C PRI  NI ADDR        SZ WCHAN      STIME TTY          TIME CMD  
    21. 4 S root          1      0  0  80   0 -       32011 ep_pol   13:55 ?        00:00:00 /usr/lib/systemd/systemd --switched-root --system --deserialize 22  
    22. 1 S root          2      0  0  80   0 -            0 kthrea   13:55 ?        00:00:00 [kthreadd]  
    23. 1 S root          3      2  0  80   0 -            0 kthrea   13:55 ?        00:00:00 [pool_workqueue_]  
    24. 1 I root          4      2  0  60 -20 -            0 rescue   13:55 ?        00:00:00 [kworker/R-rcu_g]  
    25. 1 I root          5      2  0  60 -20 -            0 rescue   13:55 ?        00:00:00 [kworker/R-slub_]  
    26. 1 I root          6      2  0  60 -20 -            0 rescue   13:55 ?        00:00:00 [kworker/R-netns]  
    27. 1 I root          9      2  0  60 -20 -            0 worker   13:55 ?        00:00:00 [kworker/0:0H-ev]  
    28. 1 I root         10      2  0  80   0 -            0 worker   13:55 ?        00:00:00 [kworker/u512:0-]
    3.GNU风格(Gnu is Not Unix )
    1. # 字段解释  
    2. # PID: 进程ID(每个进程唯一的标识)  
    3. # TTY: 进程关联的终端类型(如果适用)  
    4. # TIME: 进程使用的CPU时间(累计)  
    5. # CMD: 启动进程的命令或程序名  
    6.   
    7. # 示例输出  
    8. [root@localhost ~]# ps --user root  
    9.    PID TTY          TIME CMD  
    10.      1 ?        00:00:00 systemd  
    11.      2 ?        00:00:00 kthreadd  
    12.      3 ?        00:00:00 pool_workqueue_  
    13.      4 ?        00:00:00 kworker/R-rcu_g  
    14.      5 ?        00:00:00 kworker/R-slub_  
    15.   
    16. # 解释  
    17. # PID 1 是 systemd 进程,它是系统的初始化系统和服务管理器,负责启动系统进程和守护进程。  
    18. # PID 2 是 kthreadd,这是内核工作线程的父线程,负责创建和管理其他内核线程。  
    19. # PID 3 是 pool_workqueue_,这可能是与内核工作队列相关的线程,用于处理内核工作项。  
    20. # PID 45 是 kworker 线程,它们是内核工作线程,用于在后台执行各种内核任务,如内存回收、I/O操作等。  
    21. # TTY 列中的 ? 表示这些进程没有关联到任何终端。  
    22. # TIME 列显示了这些进程到目前为止所使用的CPU时间。

    1.top命令

    1. # top 命令输出解释  
    2.   
    3. # 顶部信息  
    4. top - 15:05:27 up  1:09,  2 users,  load average: 0.00, 0.00, 0.00  
    5. # 时间戳:15:05:27  
    6. # 系统运行时间:up 1:09,表示系统运行了1小时零9分钟  
    7. # 用户数量:2 users  
    8. # 系统负载平均值:0.00, 0.00, 0.00,分别是过去1分钟、5分钟、15分钟的平均负载  
    9.   
    10. # 任务和进程状态  
    11. Tasks: 150 total,   2 running,  84 sleeping,   1 stopped,   0 zombie  
    12. # 总任务数:150 total  
    13. # 运行中的进程数:2 running  
    14. # 睡眠中的进程数:84 sleeping  
    15. # 停止的进程数:1 stopped  
    16. # 僵尸进程数:0 zombie  
    17.   
    18. # CPU 使用情况  
    19. %Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st  
    20. # 用户空间占用CPU百分比:0.0 us  
    21. # 内核空间占用CPU百分比:0.0 sy  
    22. # 用户进程空间内改变过优先级的进程占用CPU百分比:0.0 ni  
    23. # 空闲CPU百分比:100.0 id  
    24. # 等待输入/输出的CPU时间百分比:0.0 wa  
    25. # 硬件中断服务占用CPU百分比:0.0
    26. # 软件中断服务占用CPU百分比:0.0 si  
    27. # 虚拟机占用CPU百分比:0.0 st  
    28.   
    29. # 内存使用情况  
    30. KiB Mem :   961944 total,   638660 free,   184380 used,   138904 buff/cache  
    31. # 物理内存总量:961944 KiB  
    32. # 空闲物理内存:638660 KiB  
    33. # 已使用的物理内存:184380 KiB  
    34. # 用作缓冲和缓存的内存:138904 KiB  
    35.   
    36. # 交换空间使用情况  
    37. KiB Swap:  4194300 total,  4194300 free,        0 used.   633556 avail Mem   
    38. # 交换空间总量:4194300 KiB  
    39. # 空闲交换空间:4194300 KiB  
    40. # 已使用的交换空间:0 KiB  
    41. # 可用内存(包括缓冲和交换):633556 KiB

    9.1.2控制进程

    1.启动进程

    1. [root@localhost ~]# yum -y install mysql
    2. 已加载插件:fastestmirror
    3. Loading mirror speeds from cached hostfile
    4. 正在解决依赖关系
    5. --> 正在检查事务
    6. ---> 软件包 mariadb.x86_64.1.5.5.68-1.el7 将被 安装
    7. --> 解决依赖关系完成
    8. 依赖关系解决
    9. ==============================================================================================================================================================================================
    10.  Package                                     架构                                       版本                                               源                                            大小
    11. ==============================================================================================================================================================================================
    12. 正在安装:
    13.  mariadb                                     x86_64                                     1:5.5.68-1.el7                                     c7-media                                     8.8 M
    14. 事务概要
    15. ==============================================================================================================================================================================================
    16. 安装  1 软件包
    17. 总下载量:8.8 M
    18. 安装大小:49 M
    19. Downloading packages:

    2.查看后台的进程

    1. ^Z                    #ctrl+z
    2. [1]+  已停止               yum -y install mysql
    3. [root@localhost ~]# jobs -l
    4. [1]+  2355 停止                  yum -y install mysql
    5. 3.将后台的进程恢复运行
    6. [root@localhost ~]# bg 1    #bg 命令可以将后台中暂停执行的任务恢复运行,继续后台运行
    7. [1]+ yum -y install mysql &
    8. [root@localhost ~]# Running transaction check
    9. Running transaction test
    10. Transaction test succeeded
    11. Running transaction
    12.   正在安装    : 1:mariadb-5.5.68-1.el7.x86_64                                                                                                                                             1/1
    13.   验证中      : 1:mariadb-5.5.68-1.el7.x86_64                                                                                                                                             1/1
    14. 已安装:
    15.   mariadb.x86_64 1:5.5.68-1.el7                                                                                                                                                               
    16. 完毕!
    17. [1]+  完成                  yum -y install mysql
    18.  
    19.   
    20. [root@localhost ~]# fg 1     #可以将后台任务重新恢复到前台运行
    21. yum -y install mysql
    22. Running transaction check
    23. Running transaction test
    24. Transaction test succeeded
    25. Running transaction
    26.   正在安装    : 1:mariadb-5.5.68-1.el7.x86_64                                                                                                                                             1/1
    27.   验证中      : 1:mariadb-5.5.68-1.el7.x86_64                                                                                                                                             1/1
    28. 已安装:
    29.   mariadb.x86_64 1:5.5.68-1.el7                                                                                                                                                               
    30. 完毕!
    31. [root@localhost ~]#

    3.终止进程执行

    当按Ctrl+C组合键无法终止程序或者需要结束在其他终端或后台运行的进程时可以使用专用的进程终止工具kill,killall和pkill

    (1)使用kill命令终止进程
    1. [root@localhost ~]# yum -y install httpd  #httpd服务
    2. [root@localhost ~]# systemctl start httpd #启动htpd服务
    3.   
    4. [root@localhost ~]# netstat -anpt | grep httpd  #查看httpd服务UIP
    5. tcp6       0      0 :::8080                 :::*                    LISTEN      2092/httpd          
    6. [root@localhost ~]# kill 2092
    7. [root@localhost ~]# netstat -anpt | grep httpd
    8. [root@localhost ~]#

    以下是 kill 命令的常用参数和对应的数字信号的表格:

    参数

    描述

    数字信号

    -l

    --list

    列出所有可用的信号名称

    无(列出所有信号)

    -s <信号名称>

    指定要发送的信号名称

    无(与信号名称关联)

    -p

    仅打印进程ID,而不发送任何信号

    无(仅打印PID)

    -u <用户名>

    向指定用户的所有进程发送信号

    无(与用户关联)

    <信号编号>

    直接使用信号编号作为参数

    多种(取决于具体编号)

    PID

    要接收信号的进程的ID

    无(与进程关联)

    接下来是常见的数字信号及其描述:

    数字信号

    名称

    描述

    1

    SIGHUP

    终端挂起或控制终端改变时收到此信号。启动进程收到它时,会重新读取配置文件,并重新打开日志文件。

    2

    SIGINT

    用户按下Ctrl+C时发送此信号。进程收到此信号后,会立即停止当前的操作并退出。

    3

    SIGQUIT

    用户按下Ctrl+\时发送此信号。进程收到此信号后,会生成一个核心转储文件(如果允许的话),然后退出。

    9

    SIGKILL

    强制终止进程。此信号不能被进程捕获或忽略。

    15

    SIGTERM

    请求进程正常终止。进程收到此信号后,会进行正常的清理操作并退出。

    18

    SIGCONT

    继续一个被暂停(SIGSTOP、SIGTSTP、SIGTTIN或SIGTTOU)的进程。

    19

    SIGSTOP

    停止一个进程的运行。此信号不能被进程捕获或忽略。

    (2)使用killall命令终止进程

    使用killall命令可以通过进程名称来终止进程

    1. [root@localhost ~]# vim aaa         #创建一个aaa文件
    2. [root@localhost ~]# ps              #查看进程
    3.    PID TTY          TIME CMD
    4.   1413 pts/0    00:00:00 bash
    5.   2952 pts/0    00:00:00 vim
    6.   3024 pts/0    00:00:00 ps
    7. [root@localhost ~]# killall vim     #根据工具名字取消
    8. [root@localhost ~]# ps
    9.    PID TTY          TIME CMD
    10.   1413 pts/0    00:00:00 bash
    11.   2952 pts/0    00:00:00 vim
    12.   3026 pts/0    00:00:00 ps
    13. [root@localhost ~]# killall -9 vim  #如取消不了进程可以-9强制取消进程
    14. [1]+  已杀死               vim aaa
    15. [root@localhost ~]#
    (3)使用pkill命令终止进程

    使用 pkil 命令可以根据进程的名称、运行该进程的用户、进程所在的终端等多种属性终止特定的进程,大部分选项与 pgrep 命令基本类似,如“-U”(指定用户)、“-t”(指定终端)等选项。使用起来非常方便。

    1. [root@localhost ~]# useradd zhangsan               #创建用户
    2. [root@localhost ~]# su zhangsan
    3.                     #进入用户
    4. [zhangsan@localhost root]$ pkill -U "zhangsan"     #杀死用户进程  -U表示用户名
    5. [zhangsan@localhost root]$ pkill -9  -U "zhangsan" #-9强制杀死用户进程
    6. 已杀死
    7. [root@localhost ~]#

    9.2计划任务管理

    Linux 操作系统中,除了用户即时执行的命令操作以外,还可以配置在指定的时间、指定的日期执行预先计划的系统管理任务(如定期备份、定期采集监测数据)

    9.2.1安装at工具并使用

    1. [root@localhost ~]# yum -y install at           #安装at工具
    2. 已加载插件:fastestmirror
    3. Loading mirror speeds from cached hostfile
    4. 正在解决依赖关系
    5. --> 正在检查事务
    6. ---> 软件包 at.x86_64.0.3.1.13-25.el7_9 将被 安装
    7. --> 解决依赖关系完成
    8. 依赖关系解决
    9. ==============================================================================================================================================================================================
    10.  Package                                 架构                                        版本                                                 源                                             大小
    11. ==============================================================================================================================================================================================
    12. 正在安装:
    13.  at                                      x86_64                                      3.1.13-25.el7_9                                      c7-media                                       51 k
    14. 事务概要
    15. ==============================================================================================================================================================================================
    16. 安装  1 软件包
    17. 总下载量:51 k
    18. 安装大小:95 k
    19. Downloading packages:
    20. Running transaction check
    21. Running transaction test
    22. Transaction test succeeded
    23. Running transaction
    24.   正在安装    : at-3.1.13-25.el7_9.x86_64                                                                                                                                                 1/1
    25.   验证中      : at-3.1.13-25.el7_9.x86_64                                                                                                                                                 1/1
    26. 已安装:
    27.   at.x86_64 0:3.1.13-25.el7_9                                                                                                                                                                 
    28. 完毕!
    29. [root@bogon ~]# at 19:49  
    30. at> echo aaaaa>test                   #向test输出aaaaa
    31. at> <EOT>                             #任务设置完毕后按Ctrl+D
    32. job 5 at Tue Jun  4 19:49:00 2024
    33. [root@bogon ~]# ls
    34. anaconda-ks.cfg  test
    35. [root@bogon ~]# cat test              #查看结果
    36. aaaaa
    37. [root@bogon ~]#

    9.2.3 crontab周期性任务设置

    使用 crontab 命令设置的计划任务可以按预设的周期重复执行,从而大大减轻设置重复性系统管理任务的操作。

    1.crontab的配置文件和目录

    1.使用cat /etc/crontab查看文件的具体内容
    1. [root@bogon ~]# cat /etc/crontab
    2.  
    3. # 这是一个注释行,使用 '#' 开头。它不会被执行,只是用来说明或解释文件的内容。  
    4.   
    5. #SHELL=/bin/bash  
    6. # 指定用于执行命令的 shell。通常设置为 /bin/bash,但在此示例中它被注释掉了,意味着系统会使用默认的 shell。  
    7.   
    8. #PATH=/sbin:/bin:/usr/sbin:/usr/bin  
    9. # 定义环境变量 PATH,用于指定在执行命令时搜索命令的目录列表。这里列出了常见的系统命令路径。同样,它也被注释掉了。  
    10.   
    11. #MAILTO=root  
    12. # 当命令执行时产生输出(例如,错误消息或标准输出),该输出将通过邮件发送给指定的用户。在这里,它被设置为 root,但也被注释掉了。  
    13.   
    14. # For details see man 4 crontabs  
    15. # 这是一个注释,建议用户查看 man 4 crontabs 以获取更详细的关于 crontab 的信息。  
    16.   
    17. # Example of job definition:  
    18. # 这是一个注释,给出了 cron 作业定义的示例。  
    19.   
    20. # .---------------- minute (0 - 59)  
    21. # |  .------------- hour (0 - 23)  
    22. # |  |  .---------- day of month (1 - 31)  
    23. # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...  
    24. # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat  
    25. # |  |  |  |  |  
    26. # *  *  *  *  * user-name  command to be executed  
    27. # 这是 cron 时间字段的解释。每个 * 代表一个可以指定值的位置。  
    28.   
    29. # 以下是这些字段的详细解释:  
    30. # 1. 分钟 (0 - 59)  
    31. # 2. 小时 (0 - 23)  
    32. # 3. 日期 (1 - 31)  
    33. # 4. 月份 (1 - 12) 或英文缩写(jan, feb, ...)  
    34. # 5. 星期几 (0 - 6)(其中 07 都表示星期日)或英文缩写(sun, mon, ...)  
    35.   
    36. # 在这些字段之后,指定了要执行命令的用户名,然后是要执行的命令本身。
    37. #根据/etc/crontab 配置文件中的设定,crond 将按照不同的周期重复执行相应目录中的任务脚本文件。
    2.使用crontab命令管理用户的计划任务

    设置用户的周期性计划任务列表主要通过 crontab命令进行,结合不同的选项可以完成不同的计划任务管理操作。常用的选项如下。

    选项

    描述

    -e

    编辑当前用户的计划任务列表。如果使用了

    -u

    选项,则编辑指定用户的计划任务列表。

    -u username

    指定所管理的计划任务属于哪个用户。只有 root 用户或具有相应权限的用户可以使用此选项。

    -l

    列表显示当前用户的计划任务。如果使用了

    -u

    选项,则显示指定用户的计划任务。

    -r

    删除当前用户的计划任务列表。如果使用了

    -u

    选项,则删除指定用户的计划任务列表。

    1. [root@bogon ~]# crontab -e                    #进入编辑
    2. 30 22 * * * 1,3,5 /usr/sbin/shutdown -h now   #写入脚本
    3. [root@bogon ~]# crontab -l                    #查看
    4. 30 22 * * * 1,3,5 /usr/sbin/shutdown -h now   
    5. [root@bogon ~]#
    6. #“30 22 * * * 1,3,5 /usr/sbin/shutdown -h now “这字段含义值

    这个计划任务的意思是:在每周一、三、五的晚上10点30分(22:30),执行/usr/sbin/shutdown -h now     命令来立即关闭系统。

    字段

    含义

    分钟

    分钟数(0-59)

    30

    小时

    小时数(0-23)

    22

    日期

    一个月中的日期(1-31)

    * (表示每一天)

    月份

    月份(1-12)

    * (表示每个月)

    星期

    星期几(0-6,其中0和7都表示星期日)

    1,3,5 (表示星期一、三、五)

    命令

    要执行的命令

    /usr/sbin/shutdown -h now

  • 相关阅读:
    【微信小程序】一文解忧,事件绑定
    go操作数据库(插入、更新、删除、查找、事务)
    JAVA计算机毕业设计医疗病历交互系统Mybatis+系统+数据库+调试部署
    JAVA+VUE3.0+MINIO 大文件上传(极速上传,分片上传)
    湖北移动中兴B860AV2.1_S905L_线刷固件包
    小白学java
    面经-框架-Spring refresh 流程
    Re-Ranking
    OpenAI抓内鬼出奇招,奥特曼耍了所有人:GPT搜索鸽了!改升级GPT-4
    #卷妹带你回顾Java基础(一)每日更新Day9
  • 原文地址:https://blog.csdn.net/qq_51678989/article/details/139452996