进程
什么是进程?
进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用
程序运行的载体。进程一般由程序,数据集合和进程控制块三部分组成。
程序用于描述进程要完成的功能,是控制进程执行的指令集;
数据集合是程序在执行时所需要的数据和工作区;
程序控制块包含进程的描述信息和控制信息是进程存在的唯一标志
进程具有的特征:
动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的;
并发性:任何进程都可以同其他进行一起并发执行;
独立性:进程是系统进行资源分配和调度的一个独立单位;
结构性:进程由程序,数据和进程控制块三部分组成
什么是线程?
线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位。
一个进程可以有一个或多个线程,各个线程之间共享程序的内存空间(也就是所在进程的内存空间)。
一个标准的线程由线程ID,当前指令指针PC,寄存器和堆栈组成,而进程由内存空间(代码,数据,进程空间,打开的文件)和一个或多个线程组成。
进程与线程的区别:
1. 线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;
2. 一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线
3. 进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段,数据集,堆等)及一些进程级的资源(如打开文件和信
号等),某进程内的线程在其他进程不可见;
4. 调度和切换:线程上下文切换比进程上下文切换要快得多
为什么不使用多进程而使用多线程呢?
线程启动比较快,退出比较快,对系统资源的冲击也比较小
如何查看进程信息
1. ps -l 列出与本次登录有关的进程信息;
2.ps -aux 查询内存中进程信息;
各列含义:
列名称 | 含义 |
---|---|
USER | 该进程是由哪个用户产生的 |
PID | 进程标记号 |
%CPU | 该进程占用 CPU 资源的百分比,占用的百分比越高,进程越耗费资源 |
%MEM | 该进程占用物理内存的百分比,占用的百分比越高,进程越耗费资源 |
VSZ | 该进程占用虚拟内存的大小,单位为 kb |
RSS | 该进程占用实际物理内存的大小,单位为 kb |
TTY | 该进程是在哪个终端运行的 |
STAT |
进程状态: -D:不可被唤醒的睡眠状态,通常用于 I/O 情况 -R:该进程正在运行 -S:该进程处于睡眠状态,可被唤醒 -T:停止状态,可能是在后台暂停或进程处于出错状态。 -W:内存交互状态 -X:死掉的进程 -Z:僵尸进程。进程已经中止,但是还是占用硬件资源。 -<:高优先级 -N:低优先级 -L:被锁入内存 -s:包含子进程 -l:多线程 -+:位于后台 |
START | 该进程的启动时间 |
TIME | 该进程占用 CPU 的运算时间 |
COMMAND | 产生此进程的命令名 |
3.ps -aux | grep *** 查询***进程的详细信息;
4.top 查看内存中进程的动态信息;
相关命令:
top命令
-d :指定 top 命令每隔几秒更新。默认是 3 秒
-b:使用批处理模式输出。一般和"-n"选项合用,用于把 top 命令重定向到文件中
-n :指定 top 命令执行的次数。一般和"-"选项合用
-p :仅查看指定 ID 的进程
-s:使 top 命令在安全模式中运行,避免在交互模式中出现错误
-u :只监听某个用户的进程
top行名称 说明
第一行:任务队列 系统时间,up(已运行时长),user(当前用户登录的个数),load average(系统负载)
第二行:进程信息 tasks(总进程数),running(正在运行的进程),sleeping(休眠的进程),stop(中止的进程),zombie(僵死的进程)
第三行:CPU us(用户占用),sy(内核占用),ni(优先级占用),id(空闲CPU),wa(I/O等待占用),hi(硬件中断占用),si(软件中断占用),st(虚拟化占用)
第四行:内存 total(总内存),free(空闲内存),used(已用内存),buff/cache(物理和交换内存的缓冲区内存)
第五行:交换空间 total(总交换空间),free(空闲交换空间),used(已用交换空间),avail Mem(可用物理空间)
top列名称 说明
PID 进程标记号
USER 进程所有者的用户名
PR 优先级
NI 谦让度值,负值为高优先级,正值为高优先级
VIRT 进程使用的虚拟内存总量(kb)
RES 进程使用的物理空间大小(kb)
SHR 共享内存大小(kb)
S 进程状态
%CPU 上次更新到现在的CPU时间占用百分比
%MEM 进程使用的物理内存百分比
TIME+ 进程使用的CPU时间总计
COMMAND 命令名
top常用快捷键
快捷键 说明
P 根据CPU使用百分比大小进行排序
M 根据驻留内存大小进行排序
N 根据启动时间进行排序
c 按照 CPU 的使用率排序
b 帮助信息
k 根据提示输入指定的PID号并回车终止对应的进程
q 退出
数字1 显示CPU个数及状态
5.kill -9 pid 杀死进程。
6.ps -elf命令
-e:显示系统内所有进程信息
-l:使用长格式显示进程信息
-f:使用完整格式显示进程信息
表头 | 含义 |
---|---|
F | 进程标志,说明进程的权限,常见的标志有两个: 1:进程可以被复制,但是不能被执行;4:进程使用超级用户权限; |
S | 进程状态。具体的状态和"psaux"命令中的 STAT 状态一致; |
UID | 运行此进程的用户的 ID; |
PID | 进程的 ID; |
PPID | 父进程的 ID; |
C | 该进程的 CPU 使用率,单位是百分比; |
PRI | 进程的优先级,数值越小,该进程的优先级越高,越早被 CPU 执行;系统定义不可以人为修改 |
NI | 进程的优先级,数值越小,该进程越早被执行;可以人为修改 |
ADDR | 该进程在内存的哪个位置; |
SZ | 该进程占用多大内存; |
WCHAN | 该进程是否运行。"-"代表正在运行; |
TTY | 该进程由哪个终端产生; |
TIME | 该进程占用 CPU 的运算时间,注意不是系统时间; |
CMD | 产生此进程的命令名; |
7.ps -aT:显示所有线程
-a:显示所有进程的PID(进程标记号)
-T:查看线程信息
8.pgrep “进程名”
常用选项:
-l 同时显示进程名和PID
-o 当匹配多个进程时,显示进程号最小的那个
-n 当匹配多个进程时,显示进程号最大的那个
查看进程树
pstree
常用选项:
-a:显示完整信息
-u:列出对应用户名
-P:列出对应PID号
进程启动方式
手工启动:1.前台启动:用户输入命令,直接执行程序
2.后台启动:在命令行尾加上“&”
调度启动:1.使用at命令,设置一次性计划任务
2.使用crontab命令,设置周期性计划任务
进程的前后台调度
1.ctrl+z:挂起当前进程,即调入后台并停止执行
2.jobs命令:查看处于后台的任务列表
jobs -l:显示PID号
fg命令:将后台进程恢复至前台运行
终止进程运行
1.ctrl+c
2.kill +进程号
计划任务管理
1.at命令
at [HH:MM] [yyyy-mm-dd]
时 分 年 月 日
atq 查看未执行任务列表
atrm [任务序号] 删除该任务
crontab命令
概念:按预先设置好的时间重复执行用户指定的命令,属于周期性计划任务
crontab -e [-u 用户名] 编辑计划任务
crontab -l [-u 用户名] 查看计划任务
crontab -r [-u 用户名] 删除计划任务
crontab的编辑格式
第一个“*” 分钟 0~59
第二个“*” 小时 0~23
第三个“*” 天 1~31
第四个“*” 月 1~12
第五个“*” 周几 0~7
特殊符号
* 代表任何时间
, 代表不连续时间
- 代表连续时间范围
/ 代表时间间隔