Linux中的进程和计划任务

一、进程及其命令介绍

1.1 什么是进程

要想了解进程,首先我们要了解什么是程序。

程序是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具;而进程则是运行中的程序的一个副本,是被载入内存的一个指令集合,是资源分配的单位。

在Linux系统中:

  • 进程ID(Process ID,PID)号码被用来标记各个进程
  • UID、GID、和SELinux语境决定对文件系统的存取和访问权限
  • 通常从执行进程的用户来继承
  • 存在生命周期
  • 由其父进程创建

1.2 进程的特征

  • 动态性:进程是程序的一次执行过程是临时的,有生命期的,是动态产生,动态消亡的
  • 并发性:任何进程都可以同其他进程一起并发执行
  • 独立性:进程是系统进行资源分配和调度一个独立单位
  • 结构性:进程由程序、数据和进程控制块三部分组成

二、进程管理的相关命令

2.1 ps命令

ps,全称 process state,进程状态。

ps可以查看进程当前状态,默认显示当前终端中的进程,Linux系统各进程的相关信息均保存在 /proc/pid号 下的各文件中。

格式:ps [选项]

选项 作用
a 显示当前终端下的所有进程信息,包括其他用户的进程,与“x”选项结合时将示系统中所有的进程信息
u 使用以用户为主的格式输出进程信息
x 显示当前用户在所有终端下的进程信息
-l 使用长格式显示进程信息
-e 显示系统内的所有进程信息
-f 使用完整的格式显示进程信
  • ps aux(可以查看系统中的所有进程)
    在这里插入图片描述
    在这里插入图片描述
  1. USER:进程的属主
  2. PID:进程号
  3. %CPU:进程所占CPU的百分比
  4. %MEM:进程所占物理内存的百分比
  5. VSZ:进程所占用的虚拟内存的大小
  6. RSS:进程所占用的物理内存的大小
  7. TTY:进程是在哪个终端运行的;tty1 ~ tty7 代表本地控制台终端(可以通过 Alt+F1 ~ F7 快捷键切换不同的终端),tty1~tty6 是本地的字符界面终端tty7 是图形终端pts/0 ~ 255 代表虚拟终端一般是远程连接的终端,第一个远程连接占用 pts/0,第二个远程连接占用 pts/1,依次増长
  8. STAT:进程的状态;D为不可被唤醒的睡眠状态,通常用于 I/O ;R为该进程正在运行S为该进程处于睡眠状态,可被唤醒T为停止状态,可能是在后台暂停或进程处于除错状态;Z为僵尸进程,进程已经中止,但是还是占用硬件资源;X为死掉的进程< 为高优先级N为低优先级L为被锁入内存s 为包含子进程l 为多线程+为位于后台
  9. START:进程的启动时间
    10.TIME:进程占用CPU的运算时间
    COMMAND:产生该进程的命令
  • ps -le(查看系统中所有的进程)
    (注:不仅可以查看系统中所有的进程,而且还能看到进程的父进程的 PID 和进程优先级)
    在这里插入图片描述
    在这里插入图片描述
  1. F:进程标志,说明进程的权限,常见的标志有两个: 1:进程可以被复制,但是不能被执行;4:进程使用超级用户权限
  2. S:进程状态。具体的状态和 ps aux 命令中的 STAT 状态一致
  3. UID:运行此进程的用户的 ID
  4. PID:进程号
  5. PPID:进程号
  6. C:进程的CPU使用率,单位为百分比
  7. PRI:进程的优先级,数值越小,该进程的优先级越高,越早被 CPU 执行系统定义不可以人为修改
  8. NI:进程的优先级,数值越小,该进程越早被执行可以人为修改
  9. ADDR:该进程在内存的哪个位置
  10. SZ:该进程占用多大内存
  11. WCHAN:该进程是否运行;- 代表正在运行
  12. TTY:该进程由哪个终端产生
  13. TIME:该进程占用 CPU 的运算时间注意不是系统时间
  14. CMD:产生此进程的命令名

PRI(最终的值)= PRI(不可变)+ NI(可变)

修改 NI 的值就可以改变进程的优先级NI 值越小,进程的 PRI 就会降低,该进程就越优先被 CPU 处理反之,NI 值越大,进程的 PRI 值就会増加,该进程就越靠后被 CPU 处理

修改 NI 值时有几个注意事项:

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

2.2 top命令

top 命令可以动态地持续监听进程地运行状态,与此同时,该命令还提供了一个交互界面,用户可以根据需要,人性化地定制自己的输出,进而更清楚地了进程的运行状态。

格式:top [选项]

选项 作用
-d 秒数 指定 top 命令每隔几秒更新,默认是 3 秒
-b 使用批处理模式输出,一般和 -n 选项合用,用于把 top 命令重定向到文件中
-n 次数 指定 top 命令执行的次数
-p PID 仅查看指定 ID 的进程
-s 使 top 命令在安全模式中运行,避免在交互模式中出现错误
-u 用户名 只监听某个用户的进程

在这里插入图片描述
第一行:

  1. 17:34:54:当前系统时间
  2. up 6 min:系统已经运行的时间,我现在运行了6分钟
  3. 1 user:当前登录了1个用户
  4. load average:0.00 0.14 0.12:系统在之前的1 分钟、5 分钟、15 分钟的平均负载

第二行为进程信息:

  1. 118 total:系统中的进程总数,当前为118个
  2. 1 running: 正在运行的进程数,当前为1个
  3. 117 sleeping:睡眠的进程数,当前为117个
  4. 0 stopped:正在停止的进程数,当前为0个
  5. 0 zembie:僵尸进程数,当前为0个。如果不是 0,则需要手工检查僵尸进程

第三行为CPU信息

  1. 0.0 us :用户模式占用的 CPU 百分比
  2. 0.2 sy:系统模式占用的 CPU 百分比
  3. 0.0 ni: 改变过优先级的用户进程占用的 CPU 百分比
  4. 99.8 id:空闲 CPU 占用的 CPU 百分比
  5. 0.0 wa:等待输入/输出的进程占用的 CPU 百分比
  6. 0.0 hi:硬中断请求服务占用的 CPU 百分比
  7. 0.0 si:软中断请求服务占用的 CPU 百分比
  8. 0.0 st:st(steal time)意为虚拟时间百分比,就是当有虚拟机时,虚拟 CPU 等待实际 CPU 的时间百分比

第四行为物理内存信息

  1. 1867048 total:物理内存的总量,单位为KB
  2. 1507208 free:己经使用的物理内存数量
  3. 156752 used:空闲的物理内存数量
  4. 203088 buff/cache:作为缓冲的内存数量

第五行为交换分区(swap)信息:

  1. 4194300 total:交换分区(虚拟内存)的总大小
  2. 4194300 free:空闲交换分区的大小
  3. 0 used:已经使用的交换分区的大小
  4. 1531116 avail Mem:可用内存大小

在这里插入图片描述

  • PID:进程的 ID。
  • USER:该进程所属的用户。
  • PR:优先级,数值越小优先级越高。
  • NI:优先级,数值越小、优先级越高。
  • VIRT:该进程使用的虚拟内存的大小,单位为 KB。
  • RES:该进程使用的物理内存的大小,单位为 KB。
  • SHR:共享内存大小,单位为 KB。
  • S:进程状态。
  • %CPU:该进程占用 CPU 的百分比。
  • %MEM:该进程占用内存的百分比。
  • TIME+:该进程共占用的 CPU 时间。
  • COMMAND:进程的命令名。

2.3 pgrep命令

pgrep命令用来查看指定的进程。

格式:pgrep [选项] 参数

选项 作用
-U 指定用户
**-l ** 显示进程名
-a 显示完整格式的进程名
-P pid 显示指定进程的子进程

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.4 pstree命令

pstree命令用于以树形结构列出进程信息

格式:pstree [选项] [pid/进程名]

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.5 lsof命令

lsof,全称 list opened files,列举系统中已经被打开的文件。

通过 lsof 命令,我们就可以根据文件找到对应的进程信息,也可以根据进程信息找到进程打开的文件。

格式:lsof [选项]

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

在这里插入图片描述

2.6 kill命令

kill,杀死,在Linux中用来干掉某个进程。实际上,kill 命令只是用来向进程发送一个信号,至于这个信号是什么,是用户指定的。

格式:kill [-信号] pid

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

2.7 killall命令

killall 也是用于关闭进程的一个命令,但和 kill 不同的是,killall 命令不再依靠 PID 来杀死单个进程,而是通过程序的进程名来杀死一类进程,也正是由于这一点,该命令常与 ps、pstree 等命令配合使用

格式:killall [选项] [信号] 进程名

选项 作用
-i 人机交互,杀死进程前询问
-I 忽略进程的大小写

在这里插入图片描述
在这里插入图片描述
(注:工作中千万不要乱杀某些服务进程,不然轻则跑断腿,重则跑路)

2.8 pkill命令

当作于管理进程时,pkill 命令和 killall 命令的用法相同,都是通过进程名杀死一类进程,通过 killall 命令杀死 sshd 进程的方式来踢出用户,非常容易误杀死进程,要么会把 sshd 服务杀死,要么会把自己的登录终端杀死。

不管是使用 kill 命令按照 PID 杀死登录进程,还是使用 killall 命令按照进程名杀死登录进程,都是非常容易误杀死进程的,而使用 pkill 命令则不会

格式:pkill [-信号] 进程名

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

pkill命令踢出登陆用户

  pkill [-t 终端号] 进程名  
  -U:根据进程所属的用户名终止相应进程
  -t:根据进程所在的终端终止相应进程

在这里插入图片描述

在这里插入图片描述

2.9 进程启动方式

进程启动方式有两种,一是前台启动,就是我们日常输入命令后执行,如果执行的是下载或者拷贝一些超大的文件,在此期间,我们是不能进行其他操作的;二是后台启动,就是在前台启动的命令后面加上加上空格&后台启动的任务是挂起在后台的,在此期间,我们可以进行其他的操作

在这里插入图片描述

ctrl+z:前台执行某些命令时,按 ctrl+z,可以暂停任务

在这里插入图片描述
bg [序号]:可以从新开始停止的服务
在这里插入图片描述
fg [序号]:将后台任务转为前台
在这里插入图片描述

2.10 at命令

at用于执行一次性任务,只执行一次

格式:at [选项] [时间]

时间格式:HH:MM YYYY-MM-DD

在这里插入图片描述

在这里插入图片描述

2.11 crontab命令

crontab命令用于执行重复式的命令,比如每周一都进行备份,就可以使用crontab命令,而不需要每周一都手动备份。

格式:crontab [选项] [文件]

选项 作用
-e 编辑某个用户的 crontab 文件内容。如果不指定用户,则表示编辑当前用户的 crontab 文件
-u user 用来设定某个用户的 crontab 服务,例如 “-u demo” 表示设备 demo 用户的 crontab 服务,此选项一般有 root 用户来运行
-l 显示某用户的 crontab 文件内容,如果不指定用户,则表示显示当前用户的 crontab 文件内容
-r 从 /var/spool/cron 删除某用户的 crontab 文件,如果不指定用户,则默认删除当前用户的 crontab 文件
-i 在删除用户的 crontab 文件时,给确认提示

在书写 crontab 定时任务时,需要注意以下几个事项:

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

crontab -e 进入crontab编辑页面(vim编辑)

格式为:* * * * * 执行的任务

项目 含义 范围
第一个 * 一小时当中的第几分钟(minute) 0-59
第二个 * 一天当中的第几小时(hour) 0-23
第三个 * 一个月当中的第几天(day) 1-31
第四个 * 一年当中的第几个月(month) 1-12
第五个 * 一周当中的星期几(week) 0-7(0和7都表示星期天)

在这里插入图片描述

在时间表示中,还有一些特殊符号

特殊符号 含义
* (星号) 代表任何时间。比如第一个"*"就代表一小时种每分钟都执行一次的意思
,(逗号) 代表不连续的时间。比如 0 8,12,16 * * * 就代表在每天的 8 点 0 分、12 点 0 分、16 点 0 分都执行一次命令
- (减号) 代表连续的时间范围。比如 0 5 * * 1-6 代表在周一到周六的凌晨 5 点 0 分执行命令
/(正斜杠) 代表每隔多久执行一次。比如 */10 * * * * 代表每隔 10 分钟就执行一次命令

猜你喜欢

转载自blog.csdn.net/qq_40707090/article/details/123229366