-
进程
-
进程概念
-
任务管理
-
进程管理
- 查看进程
- 管理进程
-
/proc目录
进程
进程概念
任务管理
进程管理
- 查看进程
- 管理进程
/proc目录
进程
进程概念
进程 | 程序 | |
---|---|---|
形式 | 动态 | 静态 |
所在存储器 | 内存 | 外存 |
存在时间 | 一定生命周期 | 永久 |
关系 | 进程就是一个正在运行中的程序 |
//在Bash shell下执行的各种命令,就属于Bash shell(父进程)的子进程
Bash shell下再创建一个子进程Bash shell与普通子进程不同:
1)父进程的自定义变量是无法在子进程内使用的
父进程的环境变量是子进程可以使用的
2)子进程完成后,子进程的所有变量(操作)都会注销
而不会传回到父进程中
一般进程:子进程由父进程创建(子进程可再创建新的进程);父子进程是一个异步过程,父进程不能预测子进程的情况;所以子进程结束后,父进程会调用wait()或waitpid()取得子进程的终止状态,回收子进程的资源
孤儿进程:父进程结束后,其一个或多个子进程还在运行;子进程的资源由init进程(PID=1)管理和回收
僵尸进程:子进程结束后,其父进程没有调用wait()或waitpid()去获取子进程的终止状态,且没有回收子进程的资源;则该子进程各种信息仍保存在系统中
任务管理
任务管理(job control):作用在Bash环境下,当用户登录系统获取Bash
shell后操作管理在单一终端下同时执行的多个任务
1)任务管理中,每个任务都是当前Bash的子进程(彼此之间是有相关性的)
2)只能管理当前终端Bash,无法使用任务管理的方式去管理其他终端Bash
前台(foreground):可控制、执行命令和等待操作的环境
后台(background):可存放暂停和自动执行任务的环境
1)放入后台的任务在运行时,是不能与用户进行交互的
//后台任务可以屏蔽Ctrl和C的终止
&命令:将命令放入Bash后台执行
指令格式:命令 数据流重定向 &
1)若没有数据流重定向,执行命令时的报告会突然出现在Bash前台;
2)命令产生的报告在命令结束时,才会在文件中出现;
jobs命令:列出当前Bash后台所有的任务状况
指令格式:jobs 选项
选项 | 含义 |
---|---|
-r | 仅列出正在运行(run)的任务 |
-s | 仅列出正在暂停(stop)的任务 |
-l | 同时列出任务的PID |
//其中第一个代表的是最近一个放入Bash后台的任务(后续同理)
fg命令:将Bash后台中指定任务号的任务调入前台执行
指令格式:fg %任务号
1)“%”作为可选项(可有可无),易于区分和理解
2)若不带参数,默认执行带“+”号的任务
//“fg -”代表执行带“-”号的任务
bg命令:将Bash后台中指定任务号的任务状态变成运行中(run)
指令格式:bg %任务号
kill命令:管理Bash后台中指定任务号的任务
指令格式:kill 选项 %任务号
1)后默认跟PID(若管理Bash后台任务,则必须使用“%任务号”方式)
选项 | 含义 |
---|---|
-1 | 重新读取参数配置文件(重启) |
-2 | 中断任务 |
-9 | 强制结束任务 |
-15 | 正常退出任务 |
//Bash后台任务在运行/等待的情况下系统就关闭了
所有Bash后台任务都会被中断,且下次启动也不会运行
nohup命令:保证命令运行完成,使命令不受终端和系统的影响
指令格式:nohup 命令
1)即使在运行中系统关闭了,在下次启动系统时该任务会自动运行
2)nohup不支持Bash的内置命令,命令必须是外部命令
3)nohup命令可以和&命令搭配实现Bash后台任务的百分百执行
无论是否nohup命令是否数据流重定向
输出都默认写入当前执行目录下的nohup.out文件中
若该文件不可写,则写入$HOME/nohup.out文件中
//两个文件都不可写,则该命令不可调用
进程管理
查看进程
ps命令:列出系统某一时刻的进程信息
指令格式:ps 选项
选项 | 含义 |
---|---|
-e | 列出系统上所有进程(包括隐藏进程) 与-A选项具有同样效果 默认仅列出当前终端的进程 |
-f | 同时显示UID、PPID、C和STIME栏位 默认仅:PID、TTY、TIME和CMD栏位 |
-l | 同时显示F、S、UID、PPID、C、 PRI、NI、ADDR、SZ和WCHAN栏位 |
u | 同时显示USER、%CPU、%MEM、 VSZ、RSS、STAT和START栏位 |
-u 用户名/号 | 列出指定用户运行的程序 |
-H | 以树状结构列出进程 |
列的名称 | 列的含义 |
---|---|
F | 进程标识(process flags) 4:代表该进程的权限为root 1:代表该进程仅复制(fork)而没执行 |
S | 进程状态标识 R(Running):进程正在运行 S(Sleep):进程正在睡眠(idle),可唤醒(signal) D:不可被唤醒的睡眠 T(Stop):进程停止 Z(Zombie):僵尸进程 |
UID | 该进程执行的用户id |
PID | 该进程id |
PPID (parent process ID) | 该进程的父级进程id |
C | Cpu的占用率(百分数形式显示) |
PRI | 进程被CPU执行的优先级动态值(Priority) |
NI | 进程被CPU执行的优先级静态值(Nice) |
ADDR | 代表进程在内存的那个部分 -:代表进程正在运行 |
SZ | 进程占用多少内存 |
WCHAN | 进程是否正在运行 -:代表进程正在运行 |
TTY | 发起该进程的设备识别符号 若显示“?”,表明该进程并不是由终端设备发起 |
STAT | 进程状态的详细标识 (由双字符标识) |
STIME (START) | 进程的启动时间 |
TIME | 进程占用CPU的执行时间 |
CMD (COMMAND) | 该进程的名称或者对应的路径 执行该进程对应的实际命令 |
USER | 进程所属用户 |
%CPU | 进程占用的CPU资源百分比 |
%MEM | 进程占用的物理内存百分比 |
VSZ | 进程占用的虚拟内存量(KB) |
RSS | 进程占用的固定内存量(KB) |
1)<:该进程运行在高优先级上
2)N:该进程运行在低优先级上
3)L:该进程有页面锁定在内存中
4)s:该进程是控制进程
5)l: 该进程是多线程
6)+: 该进程运行在前提
pstree命令:以树状图方式显示系统进程和其关系
指令格式:pstree 选项
1)Linux下所有的进程都依附在systemd进程下
选项 | 含义 |
---|---|
-h | 标出正在执行的进程 |
-n | 以进程PID排序(默认以进程名) |
-p | 显示进程PID |
-u | 显示进程的执行用户 |
top命令:动态显示系统所有资源使用情况
指令格式:top 选项
选项 | 含义 |
---|---|
-d | 指定top刷新时间 (默认5秒刷新一次显示内容) |
-p | 动态显示指定PID的进程 |
1)第一行:当前系统时间、已运行时间、登录系统用户数、平均任务负载
2)第二行:当前系统进程总量、不同进程状态数量(R、S、T、Z)
3)第三行:CPU的整体负载
4)第四行:物理内存情况(总量、剩余量、使用量、作为内核缓存的内存量)
5)第五行:虚拟内存情况(总量、剩余量、使用量、提前加载的内存量)
6)第六行:系统各个进程的详细信息
列的名称 | 列的含义 |
---|---|
PID | 进程的id |
USER | 运行该进程对应的用户 |
PR | 进程被CPU执行的优先级动态值 |
NI | 进程被CPU执行的优先级静态值 |
VIRT | 虚拟内存 |
RES | 常驻内存 |
SHR | 共享内存 |
S (status) | 进程的状态 S(sleepin):表示睡眠 R(run):表示运行 |
%CPU | 该进程占用CPU的百分比 |
%MEM | 该进程占用内存的百分比 |
TIME+ | 进程执行的时间 |
COMMAND | 进程的名称或者路径 |
则此时该进程的虚拟内存为500MB,常驻内存为320MB
且常驻内存中包含对其他进程的调用的使用
//进程实际使用的内存=常驻内存(RES)-共享内存(SHR)
在运行top命令时,按下以下快捷键可切换显示方式:
快捷键 | 含义 |
---|---|
q | 退出top显示 |
N | 将结果按照PID进行奖降序排序 |
M | 将结果按照内存从高到低进行降序排列 |
P | 将结果按照CPU使用率从高到低进行降序排列 |
1 (数字一) | 当系统拥有多个CPU的时候 可显示各个CPU的详细信息 |
k | 给予某个PID一个信号(signal) |
r | 给予某个PID重新分配一个nice值 |
指令格式:fuser 选项 文档/文件系统
选项 | 含义 |
---|---|
-u | 同时列出该进程的拥有者 |
-v | 同时列出该进程的用户、进程名 |
-k | 杀死该进程 |
-i | 在杀死进程前需用户确认 |
ACESS | 含义 |
---|---|
c | 该进程的工作目录 |
e | 为进程的可执行文件 |
f | 被进程打开的文件 |
F | 被进程打开并写入的文件 |
r | 该目录作为进程的根目录 |
m | 进程使用该文件进行内存映射 |
指令格式1:lsof 选项
选项 | 含义 |
---|---|
-u | 仅列出属于该用户进程打开的文件 |
-U | 仅列出UNIX-like系统的Socket文件类型 |
-a | 仅当多个选项条件同时满足时才显示 |
指令格式2:lsof +d 目录路径
1)+d:列出指定目录下所有被进程使用的文件
pidof命令:列出指定程序名的进程PID
指令格式:pidof 选项 程序名
选项 | 含义 |
---|---|
-s | 仅列出一个PID |
-x | 列出运行该进程的Shell进程PID |
管理进程
kill命令:以进程PID管理系统中的进程
指令格式1:kill 进程PID //结束指定PID的进程
指令格式2:kill 信号 进程PID //发送信号给指定进程
1)也可使用“%任务号”代替“进程PID”
2)“-名称”和信号是一样的效果
信号 | 名称 | 含义 |
---|---|---|
-1 | SIGHUP | 重新读取参数配置文件(重启) |
-2 | SIGINT | 中断进程 |
-9 | SIGKILL | 强制结束进程 |
-15 | SIGTERM | 正常退出进程 |
-19 | SIGSTOP | 暂停进程 |
指令格式1:killall 选项 进程名
选项 | 含义 |
---|---|
-e | 对进程名称进行精确匹配 |
-l | 忽略进程名称的大小写 |
-p | 删除进程所属的进程组 |
-u | 删除指定用户的进程 |
-r | 以正则表达式表示进程名称 |
-i | 以交互式删除进程(删除前需确认) |
指令格式2:killall 选项 信号 进程名 //发送信号给指定进程
Priority(PRI):由系统内核动态调整的优先级(用户无法直接调整PRI)
//PRI值越低代表该进程越优先
Nice(NI):由用户调整数值影响PRI的优先级(NI值有正负)
1)若调整进程的优先级,只能通过调整NI值
2)NI值可调整的范围为:-20~19
3)root可调整自己和任何用户进程的NI值,且范围为:-20~19
4)普通用户仅能调整自己进程的NI值,且范围为:0~19(避免抢占系统资源)
//普通用户仅能调高NI值
PRI(实际)=PRI(默认)+NI
nice命令:指定即将运行进程的NI值
指令格式:nice 选项 命令
选项 | 含义 |
---|---|
-n | 指定NI值 |
//PRI值和NI值都有默认值,一般为80和0
renice命令:指定正在运行进程的NI值
指令格式:renice NI值 进程PID
1)并不是在原本NI值的基础上加减,而是替换原本的NI值
/proc目录
/proc目录:位于内存中的伪文件系统,提供用户和程序访问进程的接口
1)系统上所有进程都以PID命名的目录存放在/proc目录下
//lsmod命令是cat /proc/modules命令的别名
lspci命令是cat /proc/pci命令的别名
/proc目录下重要文件存储的信息:
文件名 | 内容 |
---|---|
/proc/version | 内核版本和GCC版本 |
/proc/cmdline | 加载内核时所执行的命令和参数 |
/proc/kmsg | 存储内核的输出信息 |
/proc/locks | 存储由内核锁定的文件的相关信息 |
/proc/modules | 系统已加载的模块列表 |
/proc/interrupts | 系统上IRQ分配状态 |
/proc/ioports | 系统上各个设备所配置的I/O地址 |
/proc/devices | 系统已加载的所有块设备和字符设备信息 |
/proc/partitions | 块设备每个分区的主设备号、次设备号信息 (包括每个分区所含的块数目) |
/proc/bus | 系统总线设备 |
/proc/loadavg | 系统平均负载 |
/proc/cpuinfo | CPU详细信息 |
/proc/uptime | 系统自上次启动后的运行时间 |
/proc/filesystems | 系统支持的文件系统 |
/proc/mounts | 系统已挂载的所有文件系统 |
/proc/mdstat | 存储RAID相关磁盘的状态信息 |
/proc/meminfo | 系统内存相关信息 |
/proc/kcore | 物理内存的镜像大小 (等于已使用的物理内存大小再加上4k) |
/proc/vmstat | 系统虚拟内存信息 |
/proc/swaps | 系统交换分区的状态信息 |
/proc/diskstats | 磁盘I/O信息 (读写次数、读写字节数、读写延时) |
/proc/net/dev | 每块网卡的流入/流出信息 (接受包总数、发送包总数等信息) |
文件名 | 内容 |
---|---|
cmdline | 存储启动该进程时的完整命令 |
exe | 启动进程的可执行文件 (软链接) |
maps | 进程关联的执行文件和库文件 |
environ | 存储该进程相关的环境变量 (变量名大写,值小写) |
mem | 该进程所占用的内存信息 (仅能被系统调用,用户不可读取) |
statm | 该进程占用的内存信息 (可被用户读取) |
status (stat同理) | 该进程的状态信息 (status可读性较强) |
limits | 存储该进程使用资源的限制信息 |
root | 该进程运行时相对的根目录 (软连接) |
cwd | 进程所运行的目录 (软链接) |
fd | 存储该进程打开每个文件的文件描述符的目录 (软链接) |
task | 存储该进程下各个线程相关信息的目录 |
只有当该进程关闭文件的文件句柄时,文件才会被真正删除
//可通过文件句柄恢复被删除的文件(对文件句柄进行拷贝)