文章目录
前言
进程即正在运行的程序,而如何去管理操作这些程序,这是我们应该知道和掌握的。下面让我们去好好了解一些这些知识。
一、什么是进程和程序
1. 程序(静态)
- 保存在硬盘、光盘等介质中的可执行代码和数据
- 文件中静态保存的代码
2. 进程(动态)
- 在CPU及内存中运行的程序代码
- 动态执行的代码
- 父、子进程 (第一个始祖进程为init)
每个程序可以创建一个或多个进程
扩展:
进程:资源分配的最小单位
线程:程序执行的最小单位
二、查看进程
1. ps命令
格式 ps + [参数]
ps aux (查看静态进程统计信息)
参数含义:
a:显示终端上的所有进程信息,包括其它用户的进程
u:使用以用户为主的格式输出进程信息
x:显示当前用户在所有终端下的进程信息
[root@localhost ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 193940 7140 ? Ss 07:16 0:04 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S 07:16 0:00 [kthreadd]
USER:进程的用户
PID:进程的ID
%CPU:进程占用的CPU百分比
%MEM:占用内存的百分比
VSZ:该进程使用的虚拟内存量(KB)
RSS:该进程占用的物理内存量(KB)
TTY:启动进程的终端名。不是从终端启动的进程则显示为?
STAT:该行程的状态(D:不可中断的休眠状态;R:正在运行状态;S:处于休眠状态,可被唤醒;
T:停止状态,可能是在后台暂停或进程处于跟踪调试状态;z:僵尸进程,进程已经中止,但是部分程序还在内存当中)
START:该进程被触发启动时间
TIME:该进程实际使用CPU运行的时间
COMMAND:进程的启动命令
进程状态。常见的状态有以下几种:
-D:不可被唤醒的睡眠状态,通常用于 I/O 情况。
-R:该进程正在运行。
-S:该进程处于睡眠状态,可被唤醒。
-T:停止状态,可能是在后台暂停或进程处于除错状态。
-W:内存交互状态(从 2.6 内核开始无效)。
-X:死掉的进程(应该不会出现)。
-Z:僵尸进程。进程已经中止,但是部分程序还在内存当中。
-<:高优先级(以下状态在 BSD 格式中出现)。
-N:低优先级。
-L:被锁入内存。
-s:包含子进程。
-l:多线程(小写 L)。
-+:位于后台。
-C:进程占用CPU的百分比
ps -elf(以长格式显示系统进程信息)
-e:显示系统内的所有进程信息
-l:使用长格式显示进程信息
-f:使用完整的格式显示进程信息
[root@localhost ~]# ps -elf
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S root 1 0 0 80 0 - 48485 ep_pol 07:16 ? 00:00:04 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
1 S root 2 0 0 80 0 - 0 kthrea 07:16 ? 00:00:00 [kthreadd]
F:内核分配给进程的系统标记
S:进程的状态
UID:启动这些进程的用户
PID:进程的进程ID
PPID:父进程的进程号(如果该进程是由另一个进程启动的)
C:进程生命周期中的CPU利用率
PRI:进程的优先级(越大的数字代表越低的优先级)
NI:谦让度值用来参与决定优先级
ADDR:进程的内存地址
SZ:假如进程被换出,所需交换空间的大致大小
WCHAN:若该进程在睡眠,则显示睡眠中的系统函数名
STIME:进程启动时的系统时间
TTY:进程启动时的终端设备
TIME:运行进程需要的累计CPU时间
CMD:进程的启动命令
2.top命令(查看进程动态信息)
top常用命令:
P键:根据CPU使用百分比大小进行排序
M键:根据驻留内存大小进行排序
N键:根据启动时间进行排序
c键:切换显示命令名称和完整命令行
h键:可以获得 top程序的在线帮助信息
k键:根据提示输入指定进程的 PID 号并按 Enter 键终止对应的进程
q键:退出 top 程序
数字1键:显示CPU个数和状态
各个相关信息含义如下 :
第一行是任务队列信息
13:17:51 系统时间
up 6:00 系统已运行时长
4 user 当前登录用户数
load average: 0.00 0.01 0.05 系统负载,即单位时间内系统处理的任务数,后面三个数值分别为0分钟、1分钟、5分钟前到现在的平均值
第二行为进程信息
Tasks 总进程数
running 正在运行的进程数
sleeping 休眠的进程数
stopped 中止的进程数
zombie 僵死的进程数
第三行为CPU的信息
us 用户占用
sy 内核占用
ni 优先级调度占用
id 空闲CPU,要了解空闲的CPU百分比,主要看%id部分
wa I/0 等待占用
hi 硬件中断占用
si 软件中断占用
st 虚拟化占用
第四行为内存的信息
total 总内存空间
free 空闲内存
used 已用内存
buff/cache 物理内存和交换内存的缓冲区总和
第五行为交换空间的信息
total 总交换空间
free 空闲交换空间
used 已用交换空间
avail Mem 可用物理空间
进程信息区各列解释:
PID 进程id
USER 进程所有者的用户名
PR 优先级
NI 谦让度值。负值表示高优先级,正值表示低优先级
VIRT 进程使用的虚拟内存总量,单位kb
RES 进程使用的物理内存大小,单位kb
SHR 共享内存大小,单位kb
S 进程状态
%CPU 上次更新到现在的CPU时间占用百分比
%MEM 进程使用的物理内存百分比
TIME+ 进程使用的CPU时间总计,单位1/100秒
COMMAND 命令名/命令行
若通过 top 排名工具发现某个进程 CPU 占用率非常高,需要终止该进程的运行,可以在 top 操作界面中按 k 键,然后在列表上方将会出现“PID to signal/kill [default pid = 3180]:” 的提示信息,根据提示输入指定进程的 PID 号并按 Enter 键, 出现“Send pid 5597 signal [15/sigterm]”的二次确认的提示信息,然后按Enter 键确认即可终止对应的进程。
3.pgrep命令 (查询进程信息)
参数:
-l 选项可同时输出对应的进程名以及PID
-U 选项查询特定用户的进程
-t 选项查询在特定终端运行的进程
pgrep -l “log” #-l:显示进程名,缺省时只输出PID号
pgrep -l -U gcc -t tty2 #-U:指定特定用户 -t:指定终端
4.pstree命令 (以树形结构列出进程信息)
参数:
-p 选项使用时可以同时列出对应的PID号
-u 选项可以列出对应的用户名
-a 选项可以列出完整的命令信息
pstree -aup gy
三、控制进程
1.进程的启动
手工控制
- 前台启动: 用户输入命令,直接执行程序
- 后台启动: 在命令行尾加入“&”符号
(当进程在后台时,用户可以在前台输入其他命令,不用等后台进程结束)
调度启用
- 使用at命令,设置一次性计划任务
- 使用crontab命令,设置周期性计划任务
2. 进程前后台调度
-
Ctrl + Z组合键
将当前进程挂起,即调入后台并停止执行(必须是前台命令还未结束时使用) -
jobs 命令
jobs [-l]
查看处于后台的任务列表 -
fg 命令
将后台进程恢复到前台运行,可指定任务序号 -
bg命令
将后台进程恢复到后台运行,可指定任务序号
3.终止进程执行
-
Ctrl+C组合键
当用户在前台执行某个进程时,可以按Ctrl+C组合键强制进行中断(如命令长时间没有响应的情况下)。 -
kill和killall命令
kill用于终止指定PID号的进程
killall用于终止指定名称相关的所有进程
-9选项用于强制终止
通过 kill 命令终止进程时,需要使用进程的 PID 号作为参数。无特定选项时,kill 命令将给该进程发送终止信号并正常退出运行,若该进程已经无法响应终止信号,则可以结合“-9” 选项强行终止进程。强制终止进程时可能会导致程序运行的部分数据丢失,因此不到不得已时不要轻易使用“-9”选项。
使用 killall 命令可以通过进程名称来终止进程,当需要结束系统中多个相同名称的进程时,使用 killall 命令将更加方便,效率更高。killall 命令同样也有“-9”选项。
- pkill命令
使用 pkill 命令可以根据进程的名称、运行该进程的用户、进程所在的终端等多种属性终止特定的进程,大部分选项与 pgrep 命令基本类似,如“-U”(指定用户)、“-t”(指定终端) 等选项,使用起来非常方便
pgrep –l -U “gy” //确认目标进程相关信息3773 bash
pkill -9 -U “gy” //强行终止用户hackli 的进程
pgrep -l -U “gy” //确认目标进程已被终止
4.一次性计划任务 at命令
一次性计划任务
在 Linux 操作系统中,除了用户即时执行的命令操作以外,还可以配置在指定的时间、指定的日期执行预先计划的系统管理任务(如定期备份、定期采集监测数据)。
CentOS 系统中默认已安装了 at、cronie 软件包,通过 atd 和 crond 这两个系统服务实现一次性、周期性计划任务的功能,并分别通过 at、crontab 命令进行计划任务设置
使用at命令设置的计划任务只在指定的时间点执行一次,前提是对应的系统服务atd必须已经运行。需要注意的是,计划执行任务的时间、日期必须安排在当前系统的时刻之后, 否则将无法正确设置计划任务。
设置一次性计划任务时,在 at 命令行中依次指定计划执行任务的时间、日期作为参数
(若只指定时间则表示当天的该时间,若只指定日期则表示该日期的当前时间),确认后将进入带“at>”提示符的任务编辑界面,每行设置一条执行命令,可以依次设置多条语句,最后按 Ctrl+D 组合键提交任务。所设置的命令操作将在计划的时间点被依次执行。
root@localhost opt]# atq #查看还未执行的at任务
1 Mon Aug 23 14:55:00 2021 a root
[root@localhost opt]#
[root@localhost opt]# atrm 1 删除还未执行的at任务
Cannot find jobid 1
[root@localhost opt]#
5.周期性计划任务 crontab命令
按照预先设置的时间周期 分钟、小时、天、月、周重复执行用户指定的命令操作
- 属于周期性计划任务
- 主要设置文件
全局配置文件,位于文件: /etc/crontab
系统默认的设置,位于目录: /etc/cron.*/
用户定义的设置,位于文件: /var/spool/cron/用户名
管理crontab命令
常用选项:
-e:编辑计划任务列表。
-u:指定所管理的计划任务属于哪个用户,默认是针对当前用户(自己),一般只有 root 用户有权限使用此选项(用于编辑、删除其他用户的计划任务)。
-l:列表显示计划任务。
-r:删除计划任务列表。
下面将分别讲解 crontab 命令相关选项的使用。
常用方式:
编辑计划任务
crontab -e [-u 用户名]
#-u缺省默认是针对当前用户
查看计划任务
crontab -l [-u 用户名]
删除计划任务
crontab -r [-u 用户名]
任务配置格式:
分钟-小时-日期-月份-星期 命令或者脚本文件
字段 | 说明 |
---|---|
分钟 | 取值为从0到59之间的任意整数 |
小时 | 取值为从0到23之间的任意整数 |
日期 | 取值为从1到31之间的任意整数 |
月份 | 取值为从1到12之间的任意整数 |
星期 | 取值为从0到7之间的任意整数,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天
总结
- 查看进程的命令(ps、 top、pgrep、 pstree)
- 进程控制
启动进程、调度进程、终止进程 - at命令 设置计划任务 (一次性任务)
- crontab计划任务的配置字段 (周期性任务)
努力去掌握如何管理进程,如何去计划性的设置周期性任务对未来的工作有很大的帮助。它可以大大节省每次重复操作的时间,也要熟练的掌握。