Linux_11_进程

进程

进程概念

进程(process):程序被触发后,执行者的权限与属性、程序的代码和所需使用的数据都会被加载到一个内存单元中,且操作系统给予该内存单元一个标识符(PID)
在这里插入图片描述

PID:在Linux中发生的任何事务,系统都将其定义为进程;并给予该进程一个ID(PID),同时根据触发该进程的用户与相关属性关系,给予该PID一组有效的权限设置
在这里插入图片描述

进程程序
形式动态静态
所在存储器内存外存
存在时间一定生命周期永久
关系进程就是一个正在运行中的程序

子进程:由一个进程(父进程)衍生出来的其他进程

//在Bash shell下执行的各种命令,就属于Bash shell(父进程)的子进程

Bash shell下再创建一个子进程Bash shell与普通子进程不同:

1)父进程的自定义变量是无法在子进程内使用的

父进程的环境变量是子进程可以使用的

2)子进程完成后,子进程的所有变量(操作)都会注销

而不会传回到父进程中

如:从一个Bash shell中进入子进程的Bash shel
在这里插入图片描述

如:设置name变量并赋值在子程序调用
在这里插入图片描述

一般进程:子进程由父进程创建(子进程可再创建新的进程);父子进程是一个异步过程,父进程不能预测子进程的情况;所以子进程结束后,父进程会调用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)命令产生的报告在命令结束时,才会在文件中出现;

如:将/home备份为/tmp/home.tar.gz
在这里插入图片描述
//任务号与Bash环境有关

如:以上例为基础,加上数据流重定向
在这里插入图片描述

jobs命令:列出当前Bash后台所有的任务状况

指令格式:jobs 选项

选项含义
-r仅列出正在运行(run)的任务
-s仅列出正在暂停(stop)的任务
-l同时列出任务的PID

如:列出当前主机的Bash后台任务状况
在这里插入图片描述

//其中第一个代表的是最近一个放入Bash后台的任务(后续同理)

fg命令:将Bash后台中指定任务号的任务调入前台执行

指令格式:fg %任务号

1)“%”作为可选项(可有可无),易于区分和理解

2)若不带参数,默认执行带“+”号的任务

//“fg -”代表执行带“-”号的任务

bg命令:将Bash后台中指定任务号的任务状态变成运行中(run)

指令格式:bg %任务号

kill命令:管理Bash后台中指定任务号的任务

指令格式:kill 选项 %任务号

1)后默认跟PID(若管理Bash后台任务,则必须使用“%任务号”方式)

选项含义
-1重新读取参数配置文件(重启)
-2中断任务
-9强制结束任务
-15正常退出任务

Bash后台与系统后台不同,任务管理仍受到终端的影响

//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以树状结构列出进程

如:列出当前终端的进程
在这里插入图片描述
//CMD后面若跟“<defunct>”,则代表该进程为僵尸进程

列的名称列的含义
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
CCpu的占用率(百分数形式显示)
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)双字符标识进程状态中:第一个字符等同于S列,第二个字符分别有:

1)< :该进程运行在高优先级上

2)N :该进程运行在低优先级上

3)L :该进程有页面锁定在内存中

4)s :该进程是控制进程

5)l : 该进程是多线程

6)+ : 该进程运行在前提

如:火狐浏览器运行前后进行的进程查找对比
在这里插入图片描述
//若查询正确且找到该进程,应该显示为两个进程才正确

pstree命令:以树状图方式显示系统进程和其关系

指令格式:pstree 选项

1)Linux下所有的进程都依附在systemd进程下

选项含义
-h标出正在执行的进程
-n以进程PID排序(默认以进程名)
-p显示进程PID
-u显示进程的执行用户

如:列出当前主机进程的树状图,并显示其PID
在这里插入图片描述

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

则此时该进程的虚拟内存为500MB,常驻内存为320MB

且常驻内存中包含对其他进程的调用的使用

//进程实际使用的内存=常驻内存(RES)-共享内存(SHR)

在运行top命令时,按下以下快捷键可切换显示方式:

快捷键含义
q退出top显示
N将结果按照PID进行奖降序排序
M将结果按照内存从高到低进行降序排列
P将结果按照CPU使用率从高到低进行降序排列
1 (数字一)当系统拥有多个CPU的时候 可显示各个CPU的详细信息
k给予某个PID一个信号(signal)
r给予某个PID重新分配一个nice值

fuser命令:列出使用指定文档/文件系统的进程

指令格式:fuser 选项 文档/文件系统

选项含义
-u同时列出该进程的拥有者
-v同时列出该进程的用户、进程名
-k杀死该进程
-i在杀死进程前需用户确认

如:查看当前目录被那些进程使用
在这里插入图片描述

ACESS含义
c该进程的工作目录
e为进程的可执行文件
f被进程打开的文件
F被进程打开并写入的文件
r该目录作为进程的根目录
m进程使用该文件进行内存映射

lsof命令:列出被进程打开的文件名称

指令格式1:lsof 选项

选项含义
-u仅列出属于该用户进程打开的文件
-U仅列出UNIX-like系统的Socket文件类型
-a仅当多个选项条件同时满足时才显示

//若同时添加-u和-U选项,但不添加-a选项会导致显示结果出错

如:仅列出root用户进程使用的Socket文件
在这里插入图片描述

指令格式2:lsof +d 目录路径
1)+d:列出指定目录下所有被进程使用的文件

如:列出当前系统所有被使用的设备
在这里插入图片描述

pidof命令:列出指定程序名的进程PID

指令格式:pidof 选项 程序名

选项含义
-s仅列出一个PID
-x列出运行该进程的Shell进程PID

如:列出系统上vim进程的PID
在这里插入图片描述

管理进程

kill命令:以进程PID管理系统中的进程

指令格式1:kill 进程PID //结束指定PID的进程

指令格式2:kill 信号 进程PID //发送信号给指定进程

1)也可使用“%任务号”代替“进程PID”

2)“-名称”和信号是一样的效果

信号名称含义
-1SIGHUP重新读取参数配置文件(重启)
-2SIGINT中断进程
-9SIGKILL强制结束进程
-15SIGTERM正常退出进程
-19SIGSTOP暂停进程

killall命令:以进程名称管理系统中的进程

指令格式1:killall 选项 进程名

选项含义
-e对进程名称进行精确匹配
-l忽略进程名称的大小写
-p删除进程所属的进程组
-u删除指定用户的进程
-r以正则表达式表示进程名称
-i以交互式删除进程(删除前需确认)

//killall相较于kill更加实用,知道进程的名称即可(不需查询进程的PID)

指令格式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值

如:在Bash后台运行Vim,且NI值为-5
在这里插入图片描述

//PRI值和NI值都有默认值,一般为80和0

renice命令:指定正在运行进程的NI值

指令格式:renice NI值 进程PID

1)并不是在原本NI值的基础上加减,而是替换原本的NI值

如:重置Bash终端的NI值为-5
在这里插入图片描述
//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/cpuinfoCPU详细信息
/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存储该进程下各个线程相关信息的目录

//一个文件正在被使用时被删除,该文件并不会立即被删除(磁盘也不会被释放)

只有当该进程关闭文件的文件句柄时,文件才会被真正删除

//可通过文件句柄恢复被删除的文件(对文件句柄进行拷贝)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值