千家信息网

理论:linux进程和计划任务管理

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,前言查看进程:分为动态查看和动态查看控制进程:以关掉进程为主,可以按条件关闭指定进程,全部关闭所有进程at 一次性任务设置crontab 周期性任务设置一: 程序和进程的关系1、 程序保存在硬盘、光盘
千家信息网最后更新 2025年02月01日理论:linux进程和计划任务管理

前言

查看进程:分为动态查看和动态查看

控制进程:以关掉进程为主,可以按条件关闭指定进程,全部关闭所有进程

at 一次性任务设置

crontab 周期性任务设置

一: 程序和进程的关系

1、 程序

  • 保存在硬盘、光盘等介质中的可执行代码和数据

  • 静态保存的代码

2、 进程

  • 在CPU及内存中运行的程序代码

  • 动态执行的代码

  • 父、子进程

​ - 每个进程可以创建一个或多个进程

3、程序、进程、线程之间的三者关系

一个应用程序可以包含一个或多个应用进程

一个进程包含一个或多个线程

线程是执行操作的最小单元

例子

应用程序=工厂

进程=车间

线程=工人

高并发处理依赖于多线程操作

二 :查看静态进程信息 ps

2.1 ps 命令

直接执行不带任何子选项的命令时,将只显示当前用户会话中打开的进程

[root@localhost ~]# ps   PID TTY          TIME CMD  4898 pts/1    00:00:00 bash  5249 pts/1    00:00:00 ps

2.2 ps aux 命令

查看静态的进程统计信息

[root@localhost ~]# ps aux
[root@localhost ~]# ps auxUSER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMANDroot          1  0.0  0.3 128212  6836 ?        Ss   10:43   0:01 /usr/lib/systemd/sroot          2  0.0  0.0      0     0 ?        S    10:43   0:00 [kthreadd]root          3  0.0  0.0      0     0 ?        S    10:43   0:00 [ksoftirqd/0]root          5  0.0  0.0      0     0 ?        S<   10:43   0:00 [kworker/0:0H]root          6  0.0  0.0      0     0 ?        S    10:43   0:00 [kworker/u256:0]root          7  0.0  0.0      0     0 ?        S    10:43   0:00 [migration/0]root          8  0.0  0.0      0     0 ?        S    10:43   0:00 [rcu_bh]root          9  0.0  0.0      0     0 ?        R    10:43   0:00 [rcu_sched]root         10  0.0  0.0      0     0 ?        S    10:43   0:00 [watchdog/0]root         12  0.0  0.0      0     0 ?        S    10:43   0:00 [kdevtmpfs]root         13  0.0  0.0      0     0 ?        S<   10:43   0:00 [netns]root         14  0.0  0.0      0     0 ?        S    10:43   0:00 [khungtaskd]

a 显示当前终端下的所有进程信息,包括其他用户的进程。与x结合时将显示系统中所有的进程信息 不带-

u 使用已用户为主的格式输出进程信息,不带-

x 显示当前用户在所有中终端下的进程信息,不带-

-e 显示系统中的所有进程信息

-l 使用长格式(long)显示进程信息

-f 使用完整的(full/)格式显示进程信息

竖着读的一列叫做字段,也叫做属性

字段解释
USER启动该进程的用户账号的名称
PID该进程在系统中的数字ID进程号,在当前系统中是唯一的
%CPUCPU的资源渣用率
%MEM内存的占用率
VSZ虚拟内存,在进程启用完毕后会释放归0
RSS占用物理内存的大小(常驻内存)
TTY显示了该进程在哪个终端上运行,是在本地终端还是在远程终端。"?"表示未知或者不需要终端
STAT进程状态,S代表休眠,R代表运行,Z代表僵死,s代表父进程,<代表高优先级,N代表低优先级,+代表前台进程,l代表多线程;对于僵死进程需要及时手动关闭终止
TIME表示启动该进程的已运行时间
COMMAND表示启动该进程的命令的所处位置

2.3 ps elf命令

  • 查看静态的进程统计信息
[root@localhost ~]# ps -fle
[root@localhost ~]# ps -fleF S UID         PID   PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD4 S root          1      0  0  80   0 - 32053 ep_pol 10:43 ?        00:00:01 /usr/lib/systemd/sy1 S root          2      0  0  80   0 -     0 kthrea 10:43 ?        00:00:00 [kthreadd]1 S root          3      2  0  80   0 -     0 smpboo 10:43 ?        00:00:00 [ksoftirqd/0]1 S root          5      2  0  60 -20 -     0 worker 10:43 ?        00:00:00 [kworker/0:0H]1 S root          6      2  0  80   0 -     0 worker 10:43 ?        00:00:00 [kworker/u256:0]1 S root          7      2  0 -40   - -     0 smpboo 10:43 ?        00:00:00 [migration/0]1 S root          8      2  0  80   0 -     0 rcu_gp 10:43 ?        00:00:00 [rcu_bh]1 R root          9      2  0  80   0 -     0 -      10:43 ?        00:00:00 [rcu_sched]5 S root         10      2  0 -40   - -     0 smpboo 10:43 ?        00:00:00 [watchdog/0]5 S root         12      2  0  80   0 -     0 devtmp 10:43 ?        00:00:00 [kdevtmpfs]1 S root         13      2  0  60 -20 -     0 rescue 10:43 ?        00:00:00 [netns]1 S root         14      2  0  80   0 -     0 watchd 10:43 ?        00:00:00 [khungtaskd]1 S root         15      2  0  60 -20 -     0 rescue 10:43 ?        00:00:00 [writeback]1 S root         16      2  0  60 -20 -     0 rescue 10:43 ?        00:00:00 [kintegrityd]1 S root         17      2  0  60 -20 -     0 rescue 10:43 ?        00:00:00 [bioset]

额外看到PPID,可以详细了解到该子进程的父进程是谁

PRI 用户态的优先级,可以进行人为控制的优先级

NI 是nice值(-20~19,值越小优先级越大)

不输入-,只输入ps lef得到一下结果

[root@localhost ~]# ps lefF   UID    PID   PPID PRI  NI    VSZ   RSS WCHAN  STAT TTY        TIME COMMAND4     0   4898   4894  20   0 116100  2808 do_wai Ss   pts/1      0:00 -bash USER=root LOGNAME=r4     0   5436   4898  20   0 148984  1468 -      R+   pts/1      0:00  \_ ps lef XDG_SESSION_ID4     0   2386   2379  20   0 116348  2868 n_tty_ Ss+  pts/0      0:00 bash USER=root LANG=zh_CN4     0   1371   1150  20   0 281984 26360 ep_pol Ssl+ tty1       0:01 /usr/bin/X :0 -background

2.4 结合管道操作

由于系统中运行的进程数量较多,需要查询某一个进程的信息时可以结合管道操作和grep命令进行过滤

举例:

[root@localhost ~]# ps aux | grep bashroot        781  0.0  0.0 115308   948 ?        S    10:43   0:00 /bin/bash /usr/sbin/ksmtunedroot       1748  0.0  0.0  51376   584 ?        Ss   10:43   0:00 /usr/bin/ssh-agent /bin/sh -c exec -l /bin/bash -c "env GNOME_SHELL_SESSION_MODE=classic gnome-session --session gnome-classic"root       2386  0.0  0.1 116348  2868 pts/0    Ss+  10:43   0:00 bashroot       4898  0.0  0.1 116100  2808 pts/1    Ss   13:45   0:00 -bashroot       5360  0.0  0.0 112728   968 pts/1    R+   14:18   0:00 grep --color=auto bash[root@localhost ~]# ps aux | grep "bash$"root       2386  0.0  0.1 116348  2868 pts/0    Ss+  10:43   0:00 bashroot       4898  0.0  0.1 116100  2808 pts/1    Ss   13:45   0:00 -bash

三 :查看动态进程信息 top

top命令

  • 查看动态的进程排名信息
[root@localhost ~]# top

表格是动态的

  • tasks 系统任务信息; total 总进程数; running 正在运行的进程数; sleeping 休眠的进程数; stopped 中止的进程数; zombie 僵死无响应的进程数
  • cpu占用信息(%Cpu(s));us 用户占用; sy 内核占用; ni 优先级调度占用; id 空闲cpu; wa I/O等待占用; hi 硬件中断占用; si 软件中断占用; st 虚拟化占用;
  • Kib MEN 内存占用信息; total 总内存空间; used 已用内存; free 空闲内存;buff/cache 缓冲区域
  • KiB Swap 交换空间占用; total 总交换空间; used 已用交换空间; free 空闲交换空间; avail Mem 缓存空间

在top查看过程中,可以按c键根据cpu占用情况对进程列表进行排序,按M可以根据MEM内存占用情况进行排序,按h获得帮助信息,按q退出top程序,按k就是关闭进程(kill),通常情况下k中会有当前占用内存最高的pid在其中,默认直接关闭,也可以输入对应的pid去回车终止对应的进程

动态top查看主要看cpu占用

四 :查看进程信息 pgrep

pgrep命令

根据特定条件查询进程PID信息

[root@localhost ~]# pgrep -l "log"400 xfs-log/dm-0594 xfs-log/sda1624 xfs-log/dm-2688 systemd-logind707 rsyslogd715 abrt-watch-log727 abrt-watch-log[root@localhost ~]# pgrep  "log"400594624688707715727[root@localhost ~]# pgrep -l -U root -t tty11371 X

pgrep pid进程的过滤

-l 长格式显示,即显示进程名

-U 指定特定用户,检索查询该用户的进程

-t 指终端(telent ) tty1 代表远程终端

本地终端登录时会反馈为1

五: 查看进程信息 pstree

  • 以树形结构列出进程信息

-a 显示完整信息

-u 列出对应用户名

-p 列出对应PID号

[root@localhost ~]# pstree -aup  '查看所有完整信息和所有用户以及列出与所有对应PID的进程树'systemd,1 --switched-root --system --deserialize 21  ├─ModemManager,689  │   ├─{ModemManager},708  │   └─{ModemManager},756  ├─NetworkManager,788 --no-daemon  │   ├─dhclient,911 -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-ens33.pid -lf...  │   ├─dhclient,913 -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-ens36.pid -lf...  │   ├─{NetworkManager},792  │   └─{NetworkManager},795  ├─VGAuthService,700 -s  ├─abrt-watch-log,715 -F BUG: WARNING: at WARNING: CPU: INFO: possible recursive locking detectedernel BUG  ├─abrt-watch-log,727 -F Backtrace /var/log/Xorg.0.log -- /usr/bin/abrt-dump-xorg -xD  ├─abrtd,710 -d -s  ├─accounts-daemon,694  │   ├─{accounts-daemon},706  │   └─{accounts-daemon},757......//省略部分信息[root@localhost ~]# pstree -ap root '只查看root用户的所有完整命令信息和对应的PID的进程数'systemd,1 --switched-root --system --deserialize 21  ├─ModemManager,689  │   ├─{ModemManager},708  │   └─{ModemManager},756  ├─NetworkManager,788 --no-daemon  │   ├─dhclient,911 -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-ens33.pid -lf...  │   ├─dhclient,913 -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-ens36.pid -lf...  │   ├─{NetworkManager},792  │   └─{NetworkManager},795  ├─VGAuthService,700 -s  ├─abrt-watch-log,715 -F BUG: WARNING: at WARNING: CPU: INFO: possible recursive locking detectedernel BUG  ├─abrt-watch-log,727 -F Backtrace /var/log/Xorg.0.log -- /usr/bin/abrt-dump-xorg -xD  ├─abrtd,710 -d -s  ├─accounts-daemon,694  │   ├─{accounts-daemon},706  │   └─{accounts-daemon},757

六 : 进程的启动方式

6.1 手工启动

  • 前台启动:用户输入命令,直接执行程序
  • 后台启动;在命令行尾加入"&(读end)"符号,后台启用是为了防止文件过大会影响正常使用系统,这时就要去后台启用
[root@localhost dev]# cp /dev/cdrom mycd.iso&[1] 6721    '输出信息中包括后台任务序号、产生对应的PID号'

6.2 调度启动(at、crontab)

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

6.3 进程的前后台调度

  1. Ctrl+Z 组合键
  • 将当前进程挂起,即调入后台并停止执行
  1. jobs 命令
  • 查看处于后台的进程列表
  1. fg命令
  • 将后台进程恢复到前台运行,可通过指定任务序号去选中
  1. bg命令
  • 将后台中的暂停执行的程序恢复运行,在后台进行接下来的操作

因为要复制的内容容量过大,所以会卡一下

命令执行完毕就会弹出命令行

为了解决这个问题,便出现了&

[root@localhost mnt]# cp -r Packages/ /opt/pas  '要执行的操作命令'^C  'ctrl+c中止命令'[root@localhost mnt]# cp -r Packages/ /opt/pas &    '后台运行'[2] 6970    '显示序号和进程PID号'[root@localhost mnt]# jobs  '查看后台的进程'[1]+  已停止               cp -i /dev/cdrom mycd.iso(工作目录:/dev)[2]-  运行中               cp -i -r Packages/ /opt/pas &[root@localhost mnt]# jobs -l   '-l可以详细列出pid号,以此进行管理'[1]+  6730 停止 (tty 输入)     cp -i /dev/cdrom mycd.iso(工作目录:/dev)[2]-  6970 运行中               cp -i -r Packages/ /opt/pas &[root@localhost mnt]# cp -rf Packages/ /opt/pa  ^Z  'ctrl+z把前台运行的命令切换到后台,被切换到后台的命令会被停止,如果需要再次让其运行,需要fg'[2]+  已停止               cp -i -rf Packages/ /opt/pa[root@localhost mnt]# fg 2  'fg 序号'cp -i -rf Packages/ /opt/pa '被切换到前台继续运行'^Z  '再次切换到后台'[2]+  已停止               cp -i -rf Packages/ /opt/pa[root@localhost mnt]# jobs      '再次查看后台程序'[1]-  已停止               cp -i /dev/cdrom mycd.iso(工作目录:/dev)[2]+  已停止               cp -i -rf Packages/ /opt/pa[root@localhost mnt]# jobs -l[1]-  6730 停止 (tty 输入)     cp -i /dev/cdrom mycd.iso(工作目录:/dev)[2]+  7114 停止                  cp -i -rf Packages/ /opt/pa[root@localhost mnt]# kill -9 6730  '强制杀掉pid为6730的进程'[root@localhost mnt]# jobs -l   '查看'[1]-  6730 已杀死  '被杀死'             cp -i /dev/cdrom mycd.iso(工作目录:/dev)[2]+  7114 停止                  cp -i -rf Packages/ /opt/pa[root@localhost mnt]# kill -9 7114  '依法炮制7114'[root@localhost mnt]# jobs -l[2]+  7114 已杀死               cp -i -rf Packages/ /opt/pa[root@localhost mnt]# fg -2 '再次把后台序号为2的进程切换到前台'-bash: fg: -2: 无效选项 '反馈无效选项'fg: 用法:fg [任务声明][root@localhost mnt]# jobs -l   '再次查看'[root@localhost mnt]#   '都没了'

七: 终止进程的运行

7.1 Ctrl+c 组合键

  • 终端正在执行的命令

7.2 kill、killall 命令

  • kill用于终止指定PID号的进程 kill pid
  • killall用于终止指定名称的所有进程 killall 进程
  • -9 选项用于强制终止
[root@localhost mnt]# systemctl start httpd '开启httpd'[root@localhost mnt]# netstat -ntap | grep 80   '查看80端口'tcp6       0      0 :::80                   :::*                    LISTEN      7466/httpd          [root@localhost mnt]# killall -9 httpd  '终止httpd的所有进程'[root@localhost mnt]# netstat -ntap | grep 80[root@localhost mnt]# 

7.3 pkill命令

  • 根据特定条件终止相应的进程
  • 常用命令选项
    • -U:根据进程所属的用户名终止相应进程
    • -t :根据进程所在的终端终止相应进程
[root@localhost mnt]# pgrep -l -U "lisi"    '检索用户-u lisi的进程,并显示-l pid对应的进程'7954 gnome-keyring-d7972 gnome-session-b7979 dbus-launch7980 dbus-daemon8038 gvfsd8043 gvfsd-fuse8129 ssh-agent8148 at-spi-bus-laun8153 dbus-daemon8158 at-spi2-registr8175 gnome-shell8183 pulseaudio8190 ibus-daemon[root@localhost mnt]# pkill -9 -U "lisi"    '强制终止-9 用户-U lisi的所有进程'[root@localhost mnt]# [root@localhost mnt]# pgrep -l -U "lisi"    '再次检索lisi,发现什么都没有'[root@localhost mnt]# [root@localhost mnt]# which pkill   '查看pkill的命令位置在哪'/usr/bin/pkill  '在usr下面的bin中,即所有用户都可以使用'

pkill -9 -U 代表强行注销用户

普通用户不可以踢掉pkill root

八、 计划任务管理 at、crond

8.1 at命令

  • 一次性计划任务
[root@localhost mnt]# at [HH:MM] [yyyy-mm-dd]   'at 小时:分钟 年-月-日'
[root@localhost mnt]# date  '查看当前时间'2019年 11月 12日 星期二 17:30:57 CST[root@localhost mnt]# at 17:33 2019-11-12   at> pgrep -U root | wc -l > /opt/test.txtat>        'ctrl+d,提交任务'job 1 at Tue Nov 12 17:33:00 2019[root@localhost mnt]# atq   '查看配置的任务,结果没有'[root@localhost mnt]# date      '看眼日期'2019年 11月 12日 星期二 17:33:59 CST  '过时间了'[root@localhost mnt]# cat /opt/test.txt180 '出现结果'

这个命令的时间必须是当前时间之后

date 获取当前系统时间

at>后面跟在未来的这个时间要执行的命令

eot 就是按ctrl +D键提交任务

也可以atq查看 ,查看将要指定的执行任务的列表

案例:在当天的21:30时自动关闭当前系统

[root@localhost mnt]# at 21:30 2019-11-12at> shutdown -h now     '关闭当前系统'at> job 2 at Tue Nov 12 21:30:00 2019[root@localhost mnt]# atq2   Tue Nov 12 21:30:00 2019 a root[root@localhost mnt]# atrm 2    '删除计划任务2'[root@localhost mnt]# atq

atrm 删除 计划任务

8.2 crontab命令

  • 按照预先设置的时间周期(分时日月周)重复执行用户指定的命令操作
  • 属于周期性计划任务
  • 主要设置文件
    • 全局配置文件,位于文件:/etc/crontab
    • 系统默认的设置,位于目录:/etc/cron.*/
    • 用户定义的设置,位于文件:/var/spool/cron/用户名

8.3 管理cron计划任务

  • 编辑cron计划任务
[root@localhost mnt]# crontab -e [-u 用户名]
  • 查看计划任务
[root@localhost mnt]# crontab -l [-u 用户名]
  • 删除计划任务
[root@localhost mnt]# crontab -r [-u 用户名]

e edit,创建计划任务

-l list 列表

-r 删除

8.4 时间数值的特殊表示方法

符号解释
*表示该位置的范围内所有时间
表示间隔的多个不连续时间点
-表示一个连续的时间范围
/n指定间隔的时间频率为n

8.5 应用实例

示例解释
0 17 1-5周一到周五每天17点
30 8 1,3,5每周一周三周五的8点30分
0 8-18/2 *每天8点到18点之间每隔两小时
0 /3每三天
[root@localhost mnt]# crontab -e"/tmp/crontab.16EW6c" 1L, 37C   '自动进入这个文件内配置''*/2 * * * *     ps aux | wc -l > /ps.txt'  '输入单引号内的配置' :wq             '保存退出'no crontab for root - using an empty onecrontab: installing new crontab[root@localhost mnt]# crontab -l    '查看计划任务'*/2 * * * * ps aux | wc -l > /ps.txt                     

九、 总结

  • 查看进程的命令(ps、top、pgrep、pstree)
  • 进程控制
    • 启动进程
    • 调度进程(Ctrl+z组合键、jobs、bg、fg)
    • 终止进程(kill、killall、pkill)
  • at命令设置计划任务
  • crontab计划任务的配置字段
0