Linux中的进程管理
1 进程的定义
程序是静态的代码文件,进程是指程序运行时的形态,进程是程序的一个副本。当运行进程的时候,系统会把当前所用到的所有代码加载到内存里面,并非直接调用硬盘里的内容,而是把硬盘里的东西复制到内存里,然后再运行。进程是有生命周期的:准备期,把硬盘里的东西复制到内存里所需要的时间;运行期;终止期,运行完毕后,程序会关闭所占用的系统资源,所释放的资源被系统再次回收。进程就相当于系统中程序所制造的运行事件。
1.1 进程和线程
进程是资源调用的最小单位,线程是进程的最小单位。程序执行流是从上到下贯穿运动的。当进程是多任务,cpu是多核心时,多任务应该同时被每个核心处理,每个核心处理的任务叫线程,线程资源是共享的。
举个例子,假如打扫卫生是一个进程,打扫卫生里面的扫地,擦桌子等是线程,双核cpu可以同时处理两个线程,这样就就加快了进程的处理速度。若是单核cpu,那么线程就没有意义了。
1.2 进程的状态
命令 | 状态 |
---|---|
R(TASK_RUNNING) | 可执行状态(running/ready),即正在被cpu处理,或者是等待被cpu处理,已经加载好资源的动作 |
S(TASK_INTRRUPTABLE) | 可唤醒休眠,即cpu在使用时,每个程序对cpu的占用时间是有严格限制的,当使用超时后,该程序就会进入休眠状态,若该程序需要再次使用cpu时,可以立即激活 |
D(TASK_UNINTRRUPTABLE) | 不可唤醒休眠,即当一个程序在系统中工作的过程中,有的资源还没有被加载完,此时该程序没法被cpu处理,也就是不可唤醒休眠 |
T(TASK_STOP) | 暂停状态,该状态是人为控制的 |
Z(EXIT_ZOMBIE) | 僵死态,即进程已经结束,但是该进程还在占用cpu资源,我们可以手动结束该进程 |
2 进程查看命令
可以点击Applications---->Utilities---->System Monitor进程查看框,里面的依赖性是指某个进程是其他进程运行时的必要条件;右键单击菜单栏,可以选择要显示的状态;对于进程栏,可以右键单击,调整它的优先级,结束进程等。
进程窗口:
选择要显示的进程状态:
进程控制:
查看进程的依赖性:
2.1 图形进程查看工具
2.2 命令进程查看 (ps)
ps命令的三种执行风格:unix,在unix中,该命令后面的参数是不需要加‘-’的、 bsd 、GNU。
ps命令参数 | 含义 |
---|---|
ps | 命令进程查看 |
a | 与终端相关的进程,即带字符设备的进程,当用户登陆系统后产生的进程都是带终端的。执行‘ps a’命令后会有一列tty,表示带字符设备 |
x | 与终端无关相关的进程,执行‘ps x’命令后会有一列ty列为‘?’ ;ax就代表所有与终端相关的和无关的进程 |
u | 用户信息归类的查看方式。注意‘ps u’是不能单独用的,因为a和x会显示其他信息,而u单用来显示用户,所以应该用‘ps au’或‘ps xu’ 或‘ps aux’ |
f | 进程层级关系,使用方法同u参数 |
o | 显示指定的某参数,如pid comm nice pri pcpu ppid stat user group等。可以使用ps aux 查看默认显示,也就是表头。使用方法:ps axo} |
-e | 显示所有进程,与ax作用相同 |
-f | 显示信息的完整格式,使用方法:ps -ef |
-H | 显示进程的层级结构 ,使用方法:ps -eH |
-o | 显示指定参数 |
–sort | =某参数,即按照该参数排序。使用方法:ps ax -o %mem,comm --sort=%mem(正序)/ps ax -o %mem,comm --sort=-%mem(倒序) |
注意:a,x,u,f,o参数没有‘-’,表明它时unix风格。
1)ps命令,查看当前进程:
ps a 命令:
ps x:
px aux:
2)查看层级结构:
3)显示指定参数:
4)显示所有参数:
5)显示信息完格式:
6)显示层级结构:
7)按照某参数排序:
ps ax 显示信息:
显示信息 | 含义 |
---|---|
PID | 进程id |
TTY | 进程用到的终端 |
STAT | 进程状态 |
TIME | 进程占用cpu时长 |
COMMAND | 进程名称 |
ps aux 显示信息:
USER | 进程所有人 |
PID | 进程id |
%CPU | 进程使用cpu的用量 |
%MEM | 进程所用到的内存用量 |
VSZ | 进程使用的虚拟内存大小 |
RSS | 进程常驻内存中的数据大小 |
TTY | 进程用到的终端 |
STAT | 进程状态 |
START | 进程运行时长 |
TIME | 进程占用cpu时长 |
COMMAND | 进程名称 |
2.3 进程过滤(pgrep)
参数 | 含义 |
---|---|
-u uid | 显示指定用户进程 |
-U user | 显示指定用户进程 |
-t tty | 显示指定终端进程 |
-l | 显示进程名称,例如:grep -lt bts/0 |
-a | 显示进程的完整名称,例如: grep -lat bts/0 |
-P pid | 显示进程的子进程pid |
过程过滤命令用法:
2.4 查看进程的pid(pidof)
例如 :pidof vim(进程)/ pidof gedit ,当开启了多个gedit时,显示进程id还是一个,因为它是在同一个进程里开了两个tab;但是当在两个shell中分别开启了两个vim,就会显示两个进程id。
2.5 动态进程查看(top)
top命令动态查看进程,动态的情况下,进入top内部,显示内容会不完全,只显示一部分。只输入一个top命令时,默认三秒刷新一次:
top命令的参数:
参数 | 含义 |
---|---|
-d | 指定刷新频率例如:top -d 1 |
-b | 以批次方式显示,不进入top内部 |
-n | 指定显示的批次数,例如:top -b -n 1 一批次就显示结束;top -b -n 2,两批次显示结束;不加b时只有n参数时,会自动进入top内部。 |
指定刷新频率为1:
以批次方式显示:
显示批次为1:
top内部命令(指输入top命令后,直接在top内部输入的命令):
命令 | 含义 |
---|---|
P | CPU排序 |
M | 内存排序 |
T | 累计占用cpu时间排序 |
l | 关闭/开启uptime信息(负载信息),即 top内部的第一行 |
t | 关闭/开启cpu&task |
s | 指定刷新频率 |
k | 操作进程。按下k之后,输入指定id,而后系统会询问要发出什么信号,操作即可,按下q可推出该操作 |
u | 查看指定用户进程。按下u直接回车,会显示所有进程,输入指定用户名后回车,只显示该用户进程 |
查看指定用户进程:
top内部显示信息 | 含义 |
---|---|
PID | 进程id |
USER | 进程所有者的用户名 |
PR | 优先级 |
NI | nice值,负值表示高优先级,正值表示低优先级 |
VIRT | 进程使用的虚拟内存总量,单位kb 。VIRT=SWAP+RES |
RES | 进程使用的,未被换出的物理内存大小,单位kb RES=CODE+DATA |
SHR | 共享内存大小,单位kb |
S | 进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程) |
%CPU | 上次更新到现在的cpu时间占用百分比 |
%MEN | 进程使用的物理内存百分比 |
TIME+ | 进程使用的cpu时间总计,单位1/100秒 |
COMMAND | 命令名/命令行 |
3 进程优先级
系统是多任务多用户的操作模式,任务的重要性是有区分的,如何确定任务的重要性,由优先级决定。
优先级范围:
范围 | 含义 |
---|---|
0-139 | 总范围 |
0-99(不可改) | 内核自控优先级范围 |
100-139(nice或pri) | 用户可控优先级 |
nice值:是系统可控的优先级(相当于优先级的另一种说法),可以把别人的优先级调的比自己高
nice值范围:-20-19(-20对应上面的100,-19对应上面的139,也就是说优先级越负,优先级越高)
priority:39-0 (在unix中,39对应100,0对应139,也就是说优先级越小,优先级越高)
进程状态( 查看进程状态可以使用stat):
进程状态 | 含义 |
---|---|
S | sleeping |
< | 优先级高 |
s | 顶级进程 |
T | stop |
N | 优先级底 |
R | running |
+ | 运行在前台 |
1)优先级监控命令:
2)输入cat ,查看优先级范围,默认开启之后的优先级pri=19,nice=0:
3)在优先级没开之前,自己设定nice值(nice -n 5 cat ):
4)当命令程序经执行了,优先级已经开了,想更改nice值 (renice -n 5 5094 )后面加的是正在运行程序的id:
5)建立监控:watch -n 1 'ps ax =0 pri,nice,pid,comm,stat | grep cat :
查看监控:显示S+:表示sleeping状态,在前台运行:
6)再建立一个监控:Ss表示睡眠状态下的顶级进程:
4 进程前后台调用
命令 | 含义 |
---|---|
ctrl+z | 把占用shell的进程打入后台挂起,比如开启了一个gedit ,可以使用该快捷键,把进程打入后台 |
bg | 把后台挂起的进程运行起来,同时不占用终端 |
fg +jobs号 | 把后台进程调回前台 |
& | 运行进程在后台 |
jobs | 查看当前shell中在后台的所有工作 |
gedit & | 使程序再运行时,就在后台 |
5 进程信息号
进程信息号是内核对进程控制的一种手段。
5.1 进程信息号
使用 man 7 signal 查看进程信号(共1-31):
下面是我们自己可控的进程信息号,其他进程信息号是不可控的:
进程信息号 | 含义 |
---|---|
1 | 重新加载系统配置文件(source) |
2 | 清空内存中的进程数据 ,相当于ctrl +c |
3 | 空内存中的鼠标(ctrl+), 按下该快捷键,鼠标消失,移动鼠标出现 |
9 | 强行结束进程(不能被阻塞) |
15 | 正常关闭进程(会被阻塞),当发送该信号给内核后,内核会判断该进程是否重要,如果是重要的,会拒绝该信号 |
18 | 运行被暂停的进程 |
19 | 暂停进程(不会被阻塞) |
20 | 暂停进程(会被阻塞) |
5.2 进程信号控制工具
命令 | 含义 |
---|---|
kill -进程信号 pid | 只结束单个进程 |
killall -进程信号 进程名 | 结束该名称的所有进程 |
pkill -进程信号 进程条件 | 例如:pkill -u westos 可以结束一个进程 ;想全部结束时pkill -9 -u westos |
1)查看当前进程,并使用15关闭某进程:
2)在shell内存中输入数据:
清空内存中的bash进程数据 :
3)建立监控:
4)强行结束4090进程:
结束该名称的所有进程:
5)建立监控:
6)结束一个名为westos的进程:
结束全部名为westos的进程:
6 systemd守护进程
6.1 什么是守护进程
守护进程是替内核分担程序控管的程序。
systemd的pid为1 ,输入pstree 可以查看进程树,可以看到下面的所有进程都是靠systemd控制的。
systemd进程对外提供了一个控制命令:systemctl(管理系统服务)
服务指在系统中开启的共享系统资源到网络中的程序。
远程操作主机:
ssh 远程主机ip -l 远程主机用户 eg:ssh -Xl root 172.25.254.10(ssh是客户端,sshd是服务端;当sshd是开启状态时,ssh才能连接上sshd)
6.2 systemctl命令的用法
参数 | 含义 |
---|---|
start | 开启 |
stop | 关闭 。关闭再重启sshd命令后,他的man pid 会发生改变 |
status | 查看状态 |
reload | 重新加载(不重启的情况下改变系统配置,不是所有服务都支持的) |
restart | 重新启动服务 |
enable | 设定服务开机启动 |
enable --now | 设定服务开机启动并当前开启服务 |
disable | 设定服务开机不启动。不管设置了enable还是disable,不会影响其当前服务的状态) |
disable --now | 设定服务开机关闭并当前关闭服务 |
list-units | 查看系统所有服务当前状态 |
list-unit-files | 查看服务开机状态 |
list-dependencies | 列出服务依赖性(绿色表示开着,白色表示已经用过) |
mask | 冻结服务。stop停止后还可以start打开。但是mask冻结后,start无法打开,解锁后可用 |
unmask | 解锁 |
set-default multi-user.target | 设定系统运行模式为无图形网络模式 |
set-default graphical.target | 设定系统运行模式为有图形的网络模式 |
get-default | 查看系统运行模式 |
注意:在当前状态下可以直接输入 init 3 进入无图形模式; init 5 再打开有图模式;runlevel 可以查看运行级别
系统运行模式:
模式 | 含义 |
---|---|
0 | POWEROFF 关机 |
1 | single单用户模式 |
2 | noG+NETWORK无图形网络模式 |
3 | noG+NETWORK无图形网络模式 |
4 | noG+NETWORK无图形网络模式 |
5 | +NETWORK 有图形网络模式 |
6 | REBOOT重启 |
1)查看sshd服务状态:
关闭该服务,查看服务状态:
2)建立监控:
3)重新加载该服务:
设定服务开机不启动:
查看监控,设置disable,但不会影响当其服务的状态:
4)设定服务开机启动:
查看监控,设置enable,但不会影响其当前服务的状态:
5)设置开机的时后关闭,当前也关闭:
设置开机的时后开启,当前也开启:
6)查看系统所有服务当前状态:
7)查看服务开机状态:
8)列出服务依赖性:
9)冻结及解锁服务:
10)init 3,进入无图形网络模式(init 5可退出):
11)systemctl命令设置系统无图形网络模式:
systemctl命令设置系统图形网络模式:
7 系统中的登陆审计
命令 | 含义 |
---|---|
w | 显示正在登陆你系统的账号;w -i 显示登陆来源 ;该命令所访问的文件/var/run/utmp |
last | 登陆成功现在已经退出的;该命令所访问的文件/var/log/wtmp |
lastb | 试图登陆但未成功;该命令所访问的文件/var/log/btmp |
注意:
虚拟机可以连真机,但反过来不行
‘> /var/log/wtmp’ 命令 表示清理该文件的信息
ifconfig 命令可以查看自己主机id
连接自己的虚拟机:
查看系统中的登陆审计: