Linux 系统进程与计划任务管理

Posted by Xavier Blog on December 24, 2023

“Yeah It’s on. ”

系统进程与计划任务管理

进程管理

  • 程序–>静态保存的代码

  • 进程–>加载到内存中的程序代码,动态执行的代码

  • 父、子进程:每一个进程可以创建一个或多个进程

  • 守护进程:常驻内存,与终端无关
  • 用户进程:用户通过终端加载的进程

扩展:

image-20231224110243458

1
2
3
问:ps aux先执行,那为什么ps aux | grep ping的结果会查到grep ping进程?

答:当你执行 ps aux | grep ping 命令时,实际上是先执行 ps aux命令,然后再执行 grep ping 命令。但是,ps aux 命令和 grep ping 命令并不是严格的顺序执行。当你在命令行输入 ps aux | grep ping 命令后,shell 会先创建一个管道,然后同时 fork 出两个子进程,一个子进程执行 ps aux 命令,另一个子进程执行 grep ping 命令,并且这两个命令是几乎同时开始执行的。因此,grep ping 进程在 ps aux 命令执行完毕时可能仍然存在,所以 ps aux 命令的输出结果中会包含 grep ping 进程。

ps命令

查看静态的进程统计信息

  • a:显示当前终端下的所有进程命令,包括其他用户的进程。与”x”选项结合时将显示系统中所有的进程信息
  • u:使用以用户为主的格式输出进程信息。
  • x:显示当前用户在终端下的进程信息。
  • -e:显示系统内的所有进程信息
  • -l:使用长格式显示进程信息
  • -f:使用完整格式显示进程信息

常用组合 ps aux 或 ps -lef

image-20231224111452680

各字段的含义描述

  • user:启动该进程的用户账号的名称

  • pid:该进程在系统中的PID号

  • %CPU:cpu占用百分比

  • %MEM:内存占用百分比

  • vss:占用虚拟内存swap空间的大小。

  • rss:占用常驻内存物理内存的大小。

  • tty:表明该进程在哪个终端上运行,?表示不需要终端

  • stat:显示了进程当前的状态:

    D:不可中断睡眠

    S:可中断睡眠

    R:就绪或运行状态

    T:中止状态

    Z:僵死状态

    <:高优先级进程

    N:低优先级进程

    +:前台进程组中的进程

    l :多线程的进程

    s:会话进程的首进程

top命令

查看进程动态信息

top 命令将会在当前终端以全屏交互式的界面显示进程排名,及时眼踪包括 CPU、内存等系统资源占用情况,默认情况下每三秒刷新一次。

  • PID: 进程的ID
  • USER: 进程所有者
  • PR: 进程的优先级别
  • NI: nice值。负数表示高优先级,正数表示低优先级
  • VIRT: 虚拟内存使用量 (kb)
  • RES: 物理内存使用量 (kb)
  • SHR: 共享内存大小 (kb)
  • S: 进程状态。D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程
  • %CPU: 该进程使用的CPU的使用率(看id,剩余)
  • %MEM: 该进程使用的物理内存和总内存的百分比
  • TIME+: 该进程启动后占用的总的CPU时间,精确到1/100秒
  • COMMAND: 进程启动命令名称

常用选项

  • -d:指定刷新的间隔时间,单位秒
  • -b: 以批量处理模式操作(非交互) ,一般与-n 同时使用
  • -n:指定循环显示的次数
  • -u:指定用户名
  • -p: 指定进程号

-b -n 组合用于将执行结果打入文件,当 CPU 占用率过高时,不应再直接执行 top 命令查看,可以将信息存入一个文件内查看,以免 CPU 占用率过高导致崩溃,常用操作如下:

1
top -b -n1 > /top.txt

pgrep命令

查询特定进程信息 pgrep 命令正是用来查询特定进程信息的专用工具。使用 pgrep 命令可以根据进程的名称、运行该进程的用户、进程所在的终端等多种属性查询特定进程的 PID 号。

  • -l: 显示进程名
  • -U: 指定特定用户
  • -t: 指定终端
  • -a: 显示完整格式的进程名
  • P pid. 显示指定进积的子进程

pstree命令

用 ASCII 字符显示树状进程结构

pstree 命令可以输出 Linux 系统中各进程的树形结构,判断出各进程之间的相互关系(父、子进程)。pstree 命令默认情况下只显示各进程的名称

  • -p:选项使用时可以同时列出对应的 PID 号
  • -u:选项可以列出对应的用户名
  • -a: 选项可以列出完整的命令信息。

image-20231224135202636

终止进程

Ctrl+c 中断正在执行的命令

kill命令

  • -9:杀死正在运行的进程(强制立刻杀死进程)
  • -15:终止正在进行的进程(优雅杀死)

killall命令

指定进程名杀死

pkill命令

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

常用选项:

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

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

任务管理

基本概念

  • 任务:登录系统取得 shel1之后,在单一终端接口下启动的进程
  • 前台:在终端接口上,可以在提示符上用户操作的环境
  • 后台:不显示在终端接口的环境

手工启动

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

1
ping baidu.com

后台启动:在命令行尾加入”&“符号,跟终端有关

1
dd if=/dev/zero of=/testfile bs=1M coun=2048 &

nohup是使程序永久被执行的方式

用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,忽略输入并把输出追加到”nohup.out“

进程的前后台调度

ctrl+z : 将正在前台运行的任务放入后台暂停

jobs: 查看处于后台的任务列表

  • -l 列出进程 ID 及其它信息
  • -p 仅列出进程 ID
  • -n 仅列出自从上次输出了状态变化提示(比如显示有进程退出) 后的发生了状态变化的进程。
  • -r 仅显示运行中的作业
  • -s 仅显示停止的作业。
  • -x 运行命令及其参数,并用新的命令的进程 ID 替代所匹配的原有作业的进程组 ID。

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

bg:将后台暂停的进程调至后台运行

at一次性任务设置

at 命令设置的计划任务只在指定的时间点执行一次,前提是对应的系统服务 atd 必须已经运行。需要注意的是,计划执行任务的时间、日期必须安排在当前系统的时刻之后,否则将无法正确设置计划任务。

  • at HH:MM 今天的HH:MM事件执行,若是时间已经超过,则明天的HH:MM时间执行
  • at HH:MM YYYY-MM-DD 指定具体的执行时间日期和时间

基本操作:

  • Ctrl+D 保存退出
  • atp 查询现有的一次性任务计划
  • atrm [任务序号] 删除第几项任务
  • at -c 查看任务的具体内容

crontab周期性任务设置

使用 crontab 命令设置的计划任务可以按预设的周期重复执行,可以大大减轻设置重复性系统管理任务的操作。启用周期性任务也有一个的前提条件,即对应的系统服务 crond必须已经运行。

系统可以执行的,crontab不一定可以执行,因为扫描的文件夹不全

由用户自行设置的 cron计划任务将被保存到目录/var/spool/cron/中,文件名与用户名相同。crond守护进程会自动检查/etc/crontab 文件、/etc/cron.d/目录及/var/spool/cron目录中的改变,如果发现有配置更改,就会被载入内存,所以当某个 crontab 文件改变后并不需要重新启动 crond 守护进程就可以使设置生效。

使用crontab命令管理用户的计划任务

  • -e:编辑计划任务列表
  • -u:指定所管理的计划任务属于哪个用户,默认时针对当前登录用户,一般只有root用户有权限使用此选项用户编辑、删除其他用户的计划任务
  • -l:列表显示计划任务
  • -r:清空计划任务列表(慎用)

image-20231224155714084

当使用“”时表示取值范围中的任意时间。除了“”以外,还可以用减号“_”、逗号“,斜杠“/”与数字构成表达式来表示较复杂的时闹关系。

”-“:表示一个连续的时间范围1-5

”,“表示一个间隔的不连续范围1,5

”/“ 每隔多少执行一次