进程与计划任务

146 阅读10分钟

程序

什么是程序

  1. 指计算机程序,是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具;
  2. 程序是一个管理名词,如一个环节,内部嵌套着一系列复杂的列逻辑慎密的一个组件,若一个地方出问题则会影响到整个主体。
  3. 用于描述进程要完成的功能,是控制进程执行的指令集

进程

什么是进程

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。

程序与进程的区别

  • 程序存放在硬盘上
  • 进程存放在内存中

进程的非正常死亡会导致机器死机等危害

进程具有的特征

  1. 动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。
  2. 并发性:任何进程都可以同其他进程一起并发执行
  3. 独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位;
  4. 异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进。

僵尸进程

正常情况下进程结束,父进程会回收子进程的硬件资源。

僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。如果父进程先退出 ,子进程被init接管,子进程退出后init会回收其占用的相关资源。

通俗点就是如果子进程出现意外关闭,父进程没有感知到,就不会回收资源,认为关闭父进程,资源不会回收就会产生僵尸进程

进程使用的内存问题

  • 内存泄漏:进程没有将内存是否,导致一直处于占用状态
  • 内存溢出:只能写10M的文件,写了10M以上的文字,就是溢出
  • 内存不足:OOM(out of 买么瑞)

一个进程至少有一个线程

线程

线程(英语:thread)是操作系统能够进行运算调度的最小单位。大部分情况下,它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

随着计算机的发展,对CPU的要求越来越高,进程之间的切换开销较大,已经无法满足越来越复杂的程 序的要求了。于是就发明了线程。

进程与线程的区别

  1. 定义不一样,进程是执行中的一段程序,而一个进程中执行中的每个任务即为一个线程。
  2. 一个线程只可以属于一个进程,但一个进程能包含多个线程。
  3. 线程无地址空间,它包括在进程的地址空间里。
  4. 线程的开销或代价比进程的小。

进程分类

前台进程

一直占用屏幕,占用终端

后台进程

不需要占用屏幕

守护进程

  • 帮别人守护(监听)
  • 在系统引导过程中启动的进程,和终端无关进程

查看进程相关命令

ps命令

可以查看进程当前状态的快照,默认显示当前终端中的进程,Linux系统各进程的相关信息均保存在/proc/数字 目录/status 下的各文件中

查看静态的进程

  • "ps aux" 可以查看系统中所有的进程
  • "ps -le" 可以查看系统中所有的进程,而且还能看到进程的父进程的 PID 和进程优先级
  • "ps -l" 只能看到当前 Shell 产生的进程

常用选项

选项功能
a显示终端下所有进程
u使用以用户为主的格式输出进程信息
x显示当前用户在所有终端下的进程信息
-e显示系统内的所有进程信息
-l使用长(Long)格式显示进程信息
-f使用完整的(Full)格式显示进程信
-o选项显示定制的信息(pid,cmd...)
k--sort 属性:对属性排序,属性前加 - 表示降序排列

ps aux

image.png

image.png

  • TTY:在那个终端运行
  • STAT:进程状态
  • COMMAND:产生此进程的命令名

ps -le

image.png

image.png

表头含义
F进程标志,说明进程的权限,常见的标志有两个: 1:进程可以被复制,但是不能被执行; 4:进程使用超级用户权限;
S进程状态。具体的状态和"psaux"命令中的 STAT 状态一致;
UID运行此进程的用户的 ID;
PID进程的 ID;
PPID父进程的 ID;
C该进程的 CPU 使用率,单位是百分比;
PRI进程的优先级,数值越小,该进程的优先级越高,越早被 CPU 执行;系统定义不可以人为修改
NI进程的优先级,数值越小,该进程越早被执行;可以人为修改
ADDR该进程在内存的哪个位置;
SZ该进程占用多大内存;
WCHAN该进程是否运行。"-"代表正在运行;
TTY该进程由哪个终端产生;
TIME该进程占用 CPU 的运算时间,注意不是系统时间;
CMD产生此进程的命令名;

PRI与NI的关系

PRI(最终值)=PRI(原始值)+NI

修改NI注意事项

  • NI值的范围是-20~19;
  • 普通用户调整NI值的范文是0~19,而且只能调整自己的进程;
  • 普通用户只能调高NI值,而不能降低,如原本NI值为0,则只能调整为大于0;
  • root用户才能设定晶层NI值为负值,而且可以调整任何用户的进程;

用户只能修改NI的值,不能直接修改PRI

ps

image.png

image.png

top

显示详情信息

选项

选项功能
-d指定 top 命令每隔几秒更新。默认是 3 秒
-b使用批处理模式输出
-n指定top命令执行的次数
-p(pid)仅查看指定id的进程
-s使 top 命令在安全模式中运行,避免在交互模式中出现错误
-u(用户名)只监听某个用户的进程

因为是动态的,所以会一直变化,并不会自动退出,需要手动按Ctrl+c退出

image.png

image.png

image.png

image.png

image.png

top命令输出内容

top 命令的输出内容是动态的,默认每隔 3 秒刷新一次。

命令的输出主要分为两部分:

  1. 第一部分是前五行,显示的是整个系统的资源使用状况,我们就是通过这些输出来判断服务器的资源使用状态的。
  2. 第二部分从第六行开始,显示的是系统中进程的信息。

image.png

pstree命令进程树

以树形结构列出进程信息

image.png

常用选项

选项说明
-a显示启动每个进程对应的完整指令,包括启动进程的路径、参数等
-p显示pid
-T不显示线程tread,默认显示线程
-u先使用户切换
-Hpid 高亮显示指定进程及其前辈进程

image.png

image.png

image.png

lsof

lsof [选项]

常用选项

选项功能
-c(字符串)只列出以字符串开头的进程打开的文件
+d(目录名)列出某个目录中所有被进程调用的文件
-u(用户名)只列出某个用户的进程打开的文件
-p(pid)列出某个 PID 进程打开的文件

lsof | more

  • 查询系统中所有进程调用的文件

image.png

vmstat监控系统资源

vmstat [-a] [刷新延时 刷新次数]

image.png

进程管理

  • 前台执行:通过终端启动,且启动后一直占据终端
  • 后台执行:可通过终端启动,但启动后即转入后台运行(释放终端)

命令 &

格式:命令[空格]&

将命令放入后台执行

  • 让运行中的进程放入后台: Ctrl+z
  • 未运行的放入后台:COMMAND &

jobs

查看运行列表

image.png

fg

调回后台任务,将加入后台任务进程,调回到前台执行

并行执行任务

可以多个任务一起执行

结束进程

kill

可以通过pid来删除

kill pid

信号编号信号名含义
0EXIT程序退出时收到该信息。
1HUP挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化。
2INT表示结束进程,但并不是强制性的,常用的 "Ctrl+C" 组合键发出就是一个 kill -2 的信号。
3QUIT退出。
9KILL杀死进程,即强制结束进程。
11SEGV段错误。
15TERM正常结束进程,是 kill 命令的默认信号。

计划任务

at一次性计划任务

  • 格式

at [选项] [时间]

image.png 打完想做的事按ctrl+d提交

atq:按任务列表

1665240344511.jpg

crontab周期

crontab的配置文件在 /etc/crontab

image.png

  1. 分(0~59)
  2. 时(0~23)
  3. 日(1~31)
  4. 月(1~12)
  5. 周(0~7(0和7都表示星期日))

crontab命令格式

  • crontab -e [-u 用户名]     //编辑计划任务
  • crontab -l [-u 用户名]     //查看计划任务
  • crontab -r [-u 用户名]     //删除计划任务

特殊表示

特殊符号功能
*表示任务时间,比如第一个"*"就代表一小时中每分钟都执行一次的意思。
代表多个不连续的时间点。比如 "0 8,12,16 * * * 命令" 就代表在每天的 8 点 0 分、12 点 0 分、16 点 0 分都执行一次命令。
-代表连续的时间范围。比如"0 5 * * 1-6 命令",代表在周一到周六的凌晨 5 点 0 分执行命令
/代表每隔多久执行一次(即间隔的时间频率)。比如"*/10命令",代表每隔 10 分钟就执行一次命令。

使用crontab注意事项

  • 6 个选项都不能为空,必须填写。如果不确定,则使用“*”代表任意时间
  • crontab 定时任务的最小有效时间是分钟,最大有效时间是月。像 2018 年某时执行、3 点 30 分 30 秒这样的时间都不能被识别。
  • 在定义时间时,日期和星期最好不要在一条定时任务中出现,因为它们都以天为单位,非常容易让管理员混淆
  • 在定时任务中,不管是直接写命令,还是在脚本中写命令,最好都使用绝对路径。有时使用相对路径的命令会报错。
  • 一定要使用

管理crontab计划任务

  • 编辑计划任务 crontab -e [-u 用户名]
  • 查看计划任务 crontab -l [-u 用户名]
  • 删除计划任务 crontab -r [-u 用户名]