Linux-进程和计划任务管理

系列文章目录

` 提示:仅用于个人学习,进行查漏补缺使用。
1.Linux介绍、目录结构、文件基本属性、Shell
2.Linux常用命令
3.Linux文件管理
4.Linux 命令安装(rpm、install)
5.Linux账号管理
6.Linux文件/目录权限管理
7.Linux磁盘管理/文件系统
8.Linux逻辑卷管理LVM
9.Linux磁盘配额
10.Linux服务器硬件及RAID配置实验
11.Linuxu引导过程与服务控制


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

本章大概内容有:
       查看进程、ps命令、top命令、pgrep、jobs、进程的前后台调度、进程的启动方式、pstree命令、终止进程的运行、计划任务管理crontab命令以及补充的僵尸/孤儿进程等

提示:以下是本篇文章正文内容,下面案例可供参考

1.查看进程

  • 注:查询指令的选择很关键-场景 (要求:适合、合理、精炼、高效)
  • 程序与进程的关系
    • 程序
      • 保存在硬盘、光盘等介质中的可执行代码和数据
      • 文件中静态保存的代码
    • 进程
      • 在CPU及内存中运行的程序代码
      • 动态执行的diamagnetic
      • 父、子进程
        • 每个程序可以创建一个或多个进程

2.ps【process status】命令—查看静态的进程统计信息

  • **ps -aux **
ps -aux	  ###查看所有进程(包括其他用户的进程)、显示进程的用户和内存使用情况并显示所有终端的进程。
选项描述ps 命令示例
a显示现行终端下的所有进程,包括其他用户的进程。ps -a
u显示进程的归属用户及其内存的使用情况。ps -u
x显示所有终端的进程。ps -x
h不显示标题列。ps -h
e查看所有进程的详细信息ps -e
f以全格式显示进程信息ps -f

image.png

  • 各列的解释:
列名解释
USER进程的用户
PID进程的ID
%CPU进程占用的CPU百分比
%MEM占用内存的百分比
VSZ该进程使用的虚拟内存量(KB)
RSS该进程占用的实际物理内存量(KB)
TTY启动进程的终端名
STAT该进程的状态(
D:不可中断的休眠状态;
R:正在运行状态;
S:处于休眠状态,可被唤醒;
T:停止状态,可能是在后台暂停或进程处于跟踪调试状态;
Z:僵尸进程,进程已经中止,但是部分程序还在内存当中)
START该进程被启动时间
TIME该进程实际使用CPU的时间
COMMAND进程的名称与参数
  • ps -elf
ps -elf				###显示当前系统中的所有进程的详细信息。
选项含义
-e显示系统内的所有进程信息。
-l使用长格式显示进程信息。
-f使用完整的格式显示进程信息。
-a显示现行终端下的所有进程。
-T查看线程信息。
-C <进程名称>显示指定进程名的信息。
-p <进程pid>显示指定pid的进程的信息。
-H显示树状结构,表示进程间的相互关系。
--no-headers不显示标题列。
  • 各列的解释:
列名含义
F内核分配给进程的系统标记。
S进程的状态。
UID启动这些进程的用户。
PID进程的进程ID。
PPID父进程的进程号(如果该进程是由另一个进程启动的)。
C进程生命周期中的CPU利用率。
PRI
进程的优先级(越大的数字代表越低的优先级)。
NI谦让度值用来参与决定优先级。
ADDR进程的内存地址。
SZ假如进程被换出,所需交换空间的大致大小。
【进程的虚拟内存大小,包括代码、数据和堆栈等所有内存空间。它并不反映物理内存的实际使用量,而是进程请求分配的总虚拟内存空间】
WCHAN若该进程在睡眠,则显示睡眠中的系统函数名。
STIME进程启动时的系统时间。
TTY 表示一个终端(PTS/1)进程启动时的终端设备。
TIME运行进程需要的累计CPU时间。
CMD进程的启动命令。

3.top命令 ----查看进程动态信息

image.png

  • 第一行是 任务队列信息
top - 11:48:41 up  4:41,  1 user,  load average: 0.02, 0.02, 0.05
列名含义
11:48:41系统时间
up 4:41系统已运行时长,格式通常为“up 时间”,其中“时间”是自系统启动以来的运行时间
1 user当前登录用户数
load average: 0.02, 0.02, 0.45系统负载,即单位时间内系统处理的任务数,后面三个数值分别为1分钟、5分钟、15分钟前到现在的平均值
  • 第二行 为 进程信息
Tasks: 229 total,   1 running, 228 sleeping,   0 stopped,   0 zombie
列名含义
Tasks总进程数,即系统中当前存在的进程总数。
running正在运行的进程数,即当前正在使用CPU的进程数。
sleeping休眠的进程数,即当前处于等待状态的进程数。
stopped中止的进程数,即当前被暂停或停止的进程数。
zombie僵死的进程数,即已经结束但未正确回收的进程数。
  • 第三行 为 CPU的信息
%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
列名含义
us用户占用,即CPU时间用于用户空间进程的比例。
sy内核占用,即CPU时间用于内核进程的比例。
ni优先级调度占用,即CPU时间用于有较高优先级的进程的比例。
id空闲CPU,表示CPU处于空闲状态的时间比例。要了解空闲CPU的百分比,主要看%id部分
waI/O 等待占用,即CPU时间用于等待I/O操作完成的比例。
hi硬件中断占用,即CPU时间用于处理硬件中断的比例。
si软件中断占用,即CPU时间用于处理软件中断的比例。
st虚拟化占用,即CPU时间用于虚拟化操作的比例。
  • 第四行 为 内存的信息
KiB Mem : 16247816 total, 15207592 free,   557944 used,   482280 buff/cache
列名含义
total总内存空间,即系统拥有的所有内存总量。
free空闲内存,即当前未分配给任何进程的内存量。
used已用内存,即已经被分配给进程的内存量。
buff/cache物理内存和交换内存的缓冲区总和,这部分内存用于提高系统性能,存储临时数据。
  • 第五行 为 交换空间的信息
KiB Swap:  8257532 total,  8257532 free,        0 used. 15313624 avail Mem
列名含义
total总交换空间,即系统配置的交换空间总量。
free空闲交换空间,即当前未使用的交换空间量。
used已用交换空间,即已经被分配用于交换的空间量。
avail Mem可用物理空间,通常指的是空闲物理内存量。
  • 进程信息区各列解释:

image.png


   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
  9547 root      20   0  320216   6872   5376 S   0.3  0.0   0:57.48 vmtoolsd
     1 root      20   0  128696   7332   4204 S   0.0  0.0   0:07.41 systemd
     2 root      20   0       0      0      0 S   0.0  0.0   0:00.11 kthreadd
     3 root      20   0       0      0      0 S   0.0  0.0   0:00.13 ksoftirqd/0
     4 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0
     5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H
     7 root      rt   0       0      0      0 S   0.0  0.0   0:00.56 migration/0
     8 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh
     9 root      20   0       0      0      0 S   0.0  0.0   0:18.15 rcu_sched
    10 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 lru-add-drain
...
...
列名含义
PID进程ID,唯一标识一个进程。
USER进程所有者的用户名。
PR优先级,进程调度时的一个重要参数。
NI谦让度值,影响进程的优先级。
VIRT进程使用的虚拟内存总量,单位为kb。
RES进程使用的物理内存大小,单位为kb。
SHR共享内存大小,单位为kb。
S进程状态,如运行®、休眠(S)、停止(T)等。
%CPU进程上次更新到现在的CPU时间占用百分比。
%MEM进程使用的物理内存百分比。
TIME+进程使用的CPU时间总计,单位为1/100秒。
COMMAND命令名或命令行,即启动进程的命令。
  • top常用命令:
命令键功能描述
P 键根据CPU使用百分比大小进行排序
M 键根据驻留内存大小进行排序
N 键根据启动时间进行排序
c 键切换显示命令名称和完整命令行
h 键获得top程序的在线帮助信息
k 键终止指定进程(输入PID后按Enter键)
q 键退出top程序
数字1 键显示CPU个数和状态
  • 以下是 top 的进阶使用选项:
    | 命令 | 功能描述 |
    | — | — |
    | top -H | 显示所有线程 |
    | top -H -p | 显示特定进程中的线程 |

PS: 表格中 “命令键” 列列出的是在 top 程序运行时可以的键,而 “命令” 列列出的是启动 top 程序时可以使用的命令行选项。

4.查看进程信息 pgrep

  • **作用:**根据给定条件搜索正在运行的进程(ID)。【pgrep bash:找名为 “bash” 的进程ID】
  • 常用选项
选项长选项描述
-a
显示进程名和PID
-c
仅显示匹配进程的数量,而不显示进程名和PID
-d--delimiter指定输出进程ID之间的分隔符
-f--full全名匹配,只匹配完整的进程名称
-g--group只匹配属于特定组的进程
-l--list-full列出全部匹配的进程名称和ID
-o--only只输出进程ID
-P--parent只匹配指定父进程ID的进程
-s--signal发送信号到匹配的进程
-v--invert反选,匹配不包含给定模式的进程
-x--exact精确匹配进程名称
-i查看进程不区分大小写

5.jobs命令—显示当前 shell 会话中的作业列表及其状态,列出后台进程的状态信息

选项描述
-l显示作业的详细列表,包括作业号、进程号、当前状态以及作业的命令行。
-n只显示自上次通知以来状态改变的作业。
-p只显示作业的进程号。
-r只显示当前正在运行的作业。
-s只显示已停止的作业。

6.进程的前后台调度

vim 111				#打开文件111并进行编辑
Ctrl+z				#将当前正在编辑的vim进程挂起到后台
vim 222				#再次打开另一个文件222进行编辑
Ctrl+z				#再次将当前正在编辑的vim进程挂起到后台
jobs -l				#列出当前shell会话中所有作业的详细列表
pgrep -l "vim"	#查找所有名为"vim"的进程,并列出它们的进程ID和命令行
killall -9 vim			###强制杀死进程,默认为 kill -15 ;格式: kill -9  10035   [10035为进程号]

7.pstree命令—查看进程树

  • pstree命令 以树状图的形式显示当前系统中的进程及其关系。
    | 选项 | 描述 |
    | — | — |
    | -a | 显示进程的完整命令行。 |
    | -c | 不使用精简格式的树状图。 |
    | -h | 特别标明当前的进程。 |
    | -l | 使用长列表格式。 |
    | -n | 按进程ID排序输出。 |
    | -p | 显示进程的PID。 |
    | -t | 以文本方式显示,不画线。 |
    | -u | 显示进程的所有者。 |
    | -V | 显示 pstree 的版本。 |

  • PS : tree 以树状结构的方式列出目录内容

8.进程的启动方式

  • 手工启动
    • 前台启动:用户输入命令,直接执行程序
    • 后台启动:在命令行尾加入“&”符号
  • 调度启动
    • 使用**at**命令,设置一次性计划任务【用于在指定的时间执行任务。实现自动化任务的有力工具,类似于Windows系统中的计划任务。】
    • 使用**crontab**命令,设置周期性计划任务

9.进程的前后台调度

  • Ctrl+Z组合键
    • 将当前进程挂起,即调入后台并停止执行
  • jobs命令
    • jobs 【-l】
    • 查看处于后台的任务列表
  • fg命令
    • 将后台进程恢复到前台运行,可指定任务序号

10.终止进程的运行

  • Ctrl+C组合键
    • 中断正在执行的命令
  • kill 、killall命令
    • kill用于终止指定PID号的进程
    • killall用于终止指定名称相关的所有进程
    • -9选项用于强制终止
  • pkill命令
    • 根据特定条件终止相应的进程
    • 常用命令选项
      • -U : 根据进程所属的用户名终止相应进程
      • -t : 根据进程所在的终端终止相应进程
      • 例如:
pkill -9 -U "teacher"					###发送 SIGKILL 信号到所有用户为 "teacher" 的进程。

11.计划任务管理—crontab命令

  • 按照预先设置的时间周期(分钟、小时、天、月、周)重复执行用户指定的命令操作
  • 属于周期性计划任务
  • 主要设置文件
    • 全局设置文件,位于文件: /etc/crontab
    • 系统默认的设置,位于目录: /etc/cron.*/
    • 用户定义的设置,位于文件: /var/spool/cron/ 用户名
  • 管理crontab计划任务
    • 编辑计划任务
crontab -e	[-u 用户名]			### -u缺省时默认是针对当前用户 -e:编辑 crontab 文件
  • 查看计划任务
crontab -l [-u 用户名]				### 展示当前设定的实时任务
  • 删除计划任务
crontab -r [-u 用户名]				### 删除所有定时任务	---	使用的时候慎重
  • crontab任务配置的格式
字段取值范围
分钟0-59
小时0-23
日期1-31
月份1-12
星期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天

12.补充

12.1

ps -aux(使用 BSD 语法):

  • a:显示所有用户(包括其他用户和root)的进程。
  • u:显示进程的详细信息,包括进程的所有者(用户名)、CPU 时间、内存使用情况等。
  • x:显示没有控制终端的进程。

ps -aux 的输出通常包括以下列:

  • USER:进程所有者(用户名)。
  • PID:进程ID。
  • %CPU:进程占用的CPU时间的百分比。
  • %MEM:进程占用的物理内存的百分比。
  • VSZ:进程使用的虚拟大小(以KB为单位)。
  • RSS:进程使用的常驻大小(以KB为单位)。
  • TTY:进程启动的终端名称(如果进程没有终端,则显示为 ?)。
  • STAT:进程状态。
  • START:进程启动时间。
  • TIME:进程使用的CPU时间总计。
  • COMMAND:启动进程的命令行。

ps -elf(使用 System V 语法):

  • e:显示所有用户的进程。
  • l:以长格式显示详细信息。
  • f:以完全格式显示详细信息。

ps -elf 的输出通常包括以下列:

  • UID:进程所有者的用户ID。
  • PID:进程ID。
  • PPID:父进程ID。
  • C:进程占用的CPU时间的百分比。
  • STIME:进程启动的时间。
  • TTY:进程启动的终端名称(如果进程没有终端,则显示为 ?)。
  • TIME:进程使用的CPU时间总计。
  • CMD:启动进程的命令行。


12.2

top命令的输出中,进程的状态(state)显示了进程当前的活动情况。关于僵尸和孤儿进程,这里做一些解释:

  1. 僵尸进程(Zombie):这是已经结束(终止)但仍然在进程表中占据一个位置的进程。它没有父进程来接收其退出状态,因此不能被操作系统回收。僵尸进程的状态显示为"Z"。
  2. 孤儿进程(Orphan):这是父进程已经终止,但是子进程仍在运行的进程。由于父进程已经结束,所以这些子进程就没有了父进程来接收它们的标准输出和错误输出。孤儿进程的状态显示为"O"。

top命令的实时输出中,您可以看到所有进程的状态,包括僵尸和孤儿进程。例如:

top - 15:23:57 up 1:15, 1 user, load average: 0.27, 0.24, 0.21
Tasks: 91 total, 1 running, 90 sleeping, 0 stopped, 0 zombie, 0 stopped, 0 tasks
%Cpu(s): 0.7 us, 0.3 sy, 0.0 ni, 98.7 id, 0.3 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 2048000 total, 983000 free, 384000 used, 680000 buff/cache
KiB Swap: 1024000 total, 1000000 free, 24000 used. 1600000 avail Mem

在这个输出中,并没有显示僵尸或孤儿进程的状态,这可能是因为系统中当前没有这样的进程,或者top命令的显示过滤了这些状态。通常,这些状态会在进程列表的底部以注释的形式显示。如果您想查看更多关于进程状态的信息,可以使用top命令的附加选项,例如-o选项,来指定以特定的顺序显示进程状态。

在Linux系统中,僵尸进程和孤儿进程是两种常见的进程状态,它们通常不会对系统造成严重的影响,但如果数量过多,可能会消耗系统资源并导致内存泄漏。以下是处理这两种进程的一般方法:

僵尸进程

僵尸进程是指已经结束但仍然在进程表中占据位置的进程。它们不占用任何系统资源,除非它们的父进程从未读取过它们的退出状态,导致它们无法被操作系统回收。

  1. 查找僵尸进程:使用ps aux | grep 'Z'pgrep -lZ'命令来查找所有的僵尸进程。
  2. 杀死僵尸进程:直接使用kill命令加上僵尸进程的PID来杀死它们。例如:kill -9 <僵尸进程PID>。但这并不是一个好方法,因为它不会清除僵尸进程的状态,除非父进程也跟着结束。
  3. 等待父进程结束:如果可能的话,等待僵尸进程的父进程结束,这样僵尸进程就会被操作系统自动回收。
  4. 使用exec:在某些情况下,可以使用exec命令替换掉原来的程序,这样原来的进程就会结束,并且其状态会被回收。
  5. 检查父进程:如果僵尸进程的数量持续增加,可能需要检查父进程是否存在问题,例如是否有未捕获的信号或异常行为。

孤儿进程

孤儿进程是指父进程结束但子进程仍在运行的进程。这些进程会被init进程(PID为1)接管。

  1. 查找孤儿进程:使用ps aux | grep 'O'pgrep -lO命令来查找所有的孤儿进程。
  2. 等待init进程回收:通常,孤儿进程会被init进程自动回收,因此不需要手动干预。
  3. 检查孤儿进程:如果孤儿进程没有被init进程回收,可能需要检查系统是否存在问题,或者孤儿进程是否应该被保留。

在处理僵尸进程和孤儿进程时,最重要的是先确定它们出现的原因,然后采取适当的措施。如果问题持续存在,可能需要更深入地调查系统的配置和程序的行为。此外,保持系统的定期维护和更新,以及使用监控工具来跟踪进程状态,可以帮助预防这类问题的发生。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值