一、程序、进程、线程的概念
1. 程序:是指一组指示计算机或其他具有信息处理能力装置执行动作或做出判断的指令,通常用某种程序设计语言编写,运行于某种目标计算机体系结构上
2. 进程:是计算机中的软件程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础,是系统分配资源和调度的基本单位,也就是说进程可以单独运行一段程序
3. 线程:是进程中的一个实体,是被系统独立调度和分派的基本单位,是CPU调度和分派的最小基本单位,线程自己不拥有操作系统资源,但是该线程可与同属进程的其他线程共享该进程所拥有的全部资源
进程是程序的实体,而线程又是进程的实体。进程又是线程的容器
程序、进程、线程三者关系图:
程序和进程的区别:
程序是静态的,而进程是动态的
程序是永久的,而进程是暂时存在的。
进程是程序的一次执行,而进程总是对应至少一个特定的程序
线程是进程内的基本调度单位
二、查看进程的基本信息
1.ps 命令
1.1 ps -aux
以简单列表的形式显示出进程信
-a:显示当前终端下的所有进程信息,包括其他用户的进程。与“x”选项结合时将显示系统中所有的进程信息
-u:使用以用户为主的格式输出进程信息。
-x:显示当前用户在所有终端下的进程信息
每列信息详解:
USERE 进程的拥有者
PID 进程的ID
%CPU 占用的CPU使用率
%MEN 占用的内存使用率
%VSZ Virtual Memory Size。占用虚拟内存大小。
%RSS Resident Set Size。常驻内存集合大小,表示该进程分配的内存大小。
TYY 终端的次要装置号(minor device number of tty)
STAT 进程的状态,其有以下几种状态表示:
D: 无法中断的休眠状态 (通常 IO 的进程)
R: 正在执行中
S: 睡眠中,可中断
T: 暂停执行
Z: 已退出,成为僵尸进程
W: 没有足够的记忆体分页可分配
<: 高优先序的行程
N: 低优先序的行程
L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
START: 行程开始时间
TIME: 执行的时间
COMMAND:所执行的指令
1.2 ps -elf
以长格式显示系统中的进程信息
-e:显示系统内的所有进程信息
-l:使用长格式显示进程信息
-f:使用完整的格式显示进程信息
F:进程标志,表示进程的状态
S:进程的状态
UID:运行该进程的用户ID
PID:进程的ID
PPID:父进程的ID
C:进程使用的CPU资源的百分比
PRI:进程的优先级
NI:谦让度值用来参与决定优先级
ADDR:进程的内存地址
SZ:进程的大小
WCHAN:如果进程处于睡眠状态,该列将显示睡眠中的系统函数名
STIME:进程开始的时间
TTY:该进程所在的终端
TIME:CPU实际使用的时间
CMD:产生此进程的命令
2. top 命令
查看进程动态信息
参数详解:
系统任务(Tasks)信息:total 总进程数;running 正在运行的进程数;sleeping 休眠的进程数;stopped 中止的进程数;zombie 僵死无响应的进程数
CPU 占用信息:us 用户占用;sy 内核占用;ni 优先级调度占用;id 空闲CPU;wa I/O 等待占用;hi 硬件中断占用;si 软件中断占用;st 虚拟化占用,要了解空闲的 CPU 百分比,主要看%id 部分。
内存占用(Mem)信息:total 总内存空间;free 空闲内存;used 已用内存;buff/cache 物理内存和交换内存的缓冲区总和。
交换空间(Swap)占用:total 总交换空间;free 空闲交换空间;used 已用交换空间;avail Mem 可用物理空间
3. pgrep 命令
常用的参数
-l:选项可同时输出对应的进程名以及PID
-U:选项查询特定用户的进程
-t:选项查询在特定终端运行的进程
后台挂起vim:
查找“vim”进程:
4. pstree 命令
以树形结构列出进程信息
-p:选项使用时可以同时列出对应的PID号
-u:选项可以列出对应的用户名
-a:选项可以列出完整的命令信息
三、进程的管理
1. 前台运行和后台运行
前台运行:进程在用户当前的命令行界面或图形界面上直接显示和交互,用户可以直接看到进程交互
后台运行:进程在后台运行,用户不会直接看到其输出或操作,通常不需要用户交互
2. 进程的启动方式
2.1 手动启动进程
由用户手工输入命令或者可执行程序的路径,可以至少启动一个进程
前台启动:用户必须等到该进程执行结束并退出以后才能继续输入其他命令,大多数命令操作在前台启动运行。进程在后台运行时,用户可以继续在当前终端中输入其他命令,而无须等待该进程结束,适用于运行耗时较长的操作
后台启动:将“&”操作符放在要执行命令的最后面,进程启动后会直接放入后台运行,而不占用前台的命令操作界面,方便用户进行其他操作
2.2 调度启动
在服务器维护工作中,经常需要执行一些比较费时而且较占用资源的任务(如数据备份),这些任务更适合在相对空闲的时候(如夜间)进行。这时就需要用户事先进行调度安排,指定任务运行的时间,当系统到达设定时间时会自动启动并完成指定的任务
使用at命令,设置一次性计划任务
使用crontab命令,设置周期性计划任务
3. 前台与后台调度
3.1 jobs 命令
查看后台进程
-l:选项可以同时显示该进程对应的PID号
3.2 Ctrl + z 组合键
vim编辑器打开/etc/passwd ;使用ctrl + z 组合键,后台挂起,但是会停止运行
3.3 bg 和 fg 命令
使用 bg(BackGround,后台)命令,可以将后台中暂停执行(如按 Ctrl+Z 组合键挂起)的任务恢复运行,继续在后台执行操作
使用 fg 命令(ForeGround,前台),可以将后台任务重新恢复到前台运行
4.终止进程
4.1 Ctrl + c 组合键
当用户在前台执行某个进程时,可以按Ctrl+C组合键强制进行中断(如命令长时间没有响应的情况下)
中断前台进程的运行后,系统将返回命令行提示符状态等待用户输入新的命令。当按 Ctrl+C 组合键无法终止程序或者需要结束在其他终端或后台运行的进程时, 可以使用专用的进程终止工具 kill、killall 和 pkill
4.2 kill 命令
通过 kill 命令终止进程时,需要使用进程的 PID 号作为参数
若该进程已经无法响应终止信号,则可以结合“-9” 选项强行终止进程:
强制终止进程时可能会导致程序运行的部分数据丢失,慎用
4.3 killall 命令
使用 killall 命令可以通过进程名称来终止进程,当需要结束系统中多个相同名称的进程时,使用 killall 命令将更加方便,效率更高
killall 命令同样也有“-9”选项。例如,执行如下的“killall -9 vim”命令可将所有名为 vim 的进程都强行终止
4.4 pkill 命令
使用 pkill 命令可以根据进程的名称、运行该进程的用户、进程所在的终端等多种属性终止特定的进程
“-U”(指定用户)、“-t”(指定终端)
强行终止用户 jqg 的进程(包括shell) 慎用
四、计划任务管理
1. at 一次性计划任务
使用at命令设置的计划任务只在指定的时间点执行一次
指定在15:16 进行重启,可以使用ctrl + d 组合键进行保存
1.1 atq 查看一次性计划任务
1.2 atrm 删除一次性计划任务
若要删除指定编号的 at 任务,可以使用 atrm 命令。删除后的 at 任务将不会被执行, 并且不会显示在 atq 命令的显示结果中,但已经执行过的任务无法删除
2. crontab 周期性计划任务
使用 crontab 命令管理用户的计划任务
设置用户的周期性计划任务列表主要通过 crontab 命令进行,结合不同的选项可以完成不同的计划任务管理操作。常用的选项如下
-e:编辑计划任务列表
-u:指定所管理的计划任务属于哪个用户,默认是针对当前用户(自己)
-l: 列表显示计划任务
-r: 删除计划任务列表
计划任务执行时间按照 分 时 日 月 周 顺序进行
减号“-”:可以表示一个连续的时间范围,如“1-4”表示整数 1、2、3、4。
逗号“,”:可以表示一个间隔的不连续范围,如“3, 4, 6, 8”。
斜杠符号“/”:可以用来指定间隔频率,如在日期字段中的“*/3”表示每隔 3 天
例如:
* */3 * * * 每隔三小时进行
* 13 * * 3,5 每周三和周五的13点钟
crontab -e 编辑周期计划
crontab -l 进行查看周期性计划
crontab -r 删除周期性计划