一、进程及其命令介绍
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(可以查看系统中的所有进程)
USER:进程的属主
PID:进程号
%CPU:进程所占CPU的百分比
%MEM:进程所占物理内存的百分比
VSZ:进程所占用的虚拟内存的大小
RSS:进程所占用的物理内存的大小
TTY:进程是在哪个终端运行的;tty1 ~ tty7 代表本地控制台终端(可以通过 Alt+F1 ~ F7 快捷键切换不同的终端),tty1~tty6 是本地的字符界面终端,tty7 是图形终端。pts/0 ~ 255 代表虚拟终端,一般是远程连接的终端,第一个远程连接占用 pts/0,第二个远程连接占用 pts/1,依次増长
STAT:进程的状态;D为不可被唤醒的睡眠状态,通常用于 I/O ;R为该进程正在运行;S为该进程处于睡眠状态,可被唤醒;T为停止状态,可能是在后台暂停或进程处于除错状态;Z为僵尸进程,进程已经中止,但是还是占用硬件资源;X为死掉的进程;< 为高优先级;N为低优先级;L为被锁入内存; s 为包含子进程;l 为多线程;+为位于后台
START:进程的启动时间
10.TIME:进程占用CPU的运算时间
COMMAND:产生该进程的命令
ps -le(查看系统中所有的进程)
(注:不仅可以查看系统中所有的进程,而且还能看到进程的父进程的 PID 和进程优先级)
F:进程标志,说明进程的权限,常见的标志有两个: 1:进程可以被复制,但是不能被执行;4:进程使用超级用户权限
S:进程状态。具体的状态和 ps aux 命令中的 STAT 状态一致
UID:运行此进程的用户的 ID
PID:进程号
PPID:父进程号
C:进程的CPU使用率,单位为百分比
PRI:进程的优先级,数值越小,该进程的优先级越高,越早被 CPU 执行;系统定义不可以人为修改
NI:进程的优先级,数值越小,该进程越早被执行;可以人为修改
ADDR:该进程在内存的哪个位置
SZ:该进程占用多大内存
WCHAN:该进程是否运行;- 代表正在运行
TTY:该进程由哪个终端产生
TIME:该进程占用 CPU 的运算时间,注意不是系统时间
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 用户名 只监听某个用户的进程
第一行:
17:34:54:当前系统时间
up 6 min:系统已经运行的时间,我现在运行了6分钟
1 user:当前登录了1个用户
load average:0.00 0.14 0.12:系统在之前的1 分钟、5 分钟、15 分钟的平均负载
第二行为进程信息:
118 total:系统中的进程总数,当前为118个
1 running: 正在运行的进程数,当前为1个
117 sleeping:睡眠的进程数,当前为117个
0 stopped:正在停止的进程数,当前为0个
0 zembie:僵尸进程数,当前为0个。如果不是 0,则需要手工检查僵尸进程
第三行为CPU信息:
0.0 us :用户模式占用的 CPU 百分比
0.2 sy:系统模式占用的 CPU 百分比
0.0 ni: 改变过优先级的用户进程占用的 CPU 百分比
99.8 id:空闲 CPU 占用的 CPU 百分比
0.0 wa:等待输入/输出的进程占用的 CPU 百分比
0.0 hi:硬中断请求服务占用的 CPU 百分比
0.0 si:软中断请求服务占用的 CPU 百分比
0.0 st:st(steal time)意为虚拟时间百分比,就是当有虚拟机时,虚拟 CPU 等待实际 CPU 的时间百分比
第四行为物理内存信息:
1867048 total:物理内存的总量,单位为KB
1507208 free:己经使用的物理内存数量
156752 used:空闲的物理内存数量
203088 buff/cache:作为缓冲的内存数量
第五行为交换分区(swap)信息:
4194300 total:交换分区(虚拟内存)的总大小
4194300 free:空闲交换分区的大小
0 used:已经使用的交换分区的大小
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 终端号] 进程名
2.9 进程启动方式
进程启动方式有两种,一是前台启动,就是我们日常输入命令后执行,如果执行的是下载或者拷贝一些超大的文件,在此期间,我们是不能进行其他操作的;二是后台启动,就是在前台启动的命令后面加上加上空格&,后台启动的任务是挂起在后台的,在此期间,我们可以进行其他的操作
-U:根据进程所属的用户名终止相应进程
-t:根据进程所在的终端终止相应进程
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 分钟就执行一次命令