1.7 Linux中的进程管理

什么是进程

进程定义

程序是静态的代码文件
进程是指程序运行时的形态
进程是程序的一个副本
进程是有生命周期的,即准备期 运行期 终止期

进程与线程

作为两个常听到的名词,进程和线程很容易被搞混.

进程是资源调用的最小单位
线程是进程的最小单位

当代使用计算机时候常听到多核心这个概念,实际上当我们运行程序时,如果需要同时执行多个任务/操作,为了保证运行效率,任务就会交给多个核心进行处理.每个核心处理的任务就叫做线程.简而言之,一个程序至少有一个进程,一个进程至少有一个线程,线程增加了程序的并发性.

进程查看命令

提到了进程,当然得学习如何查看,不然仅仅了解概念显然是没什么用的.
查看进程的方式有两种,图形化的和非图形化的.

gnome-system-monitor		##图形化进程查看工具

ps							#进程查看,shell中常用,不依赖图形界面

由于进程包含的信息繁多,因此理所当然的,ps命令所能添加的参数也很多.
当不加参数默认运行ps命令时会列出当前用户正在运行进程的简单信息.
无参数命令

ps命令的参数

ps 命令有三种执行风格: unix bsd GNU,大体上可通过参数前是否有 - 进行区分.

ps				#进程查看
				#a 与终端相关的进程(当用户登陆系统后产生的进程都是带终端的)
				#x 与终端无关相关的进程
				#u 用户信息归类的查看方式
				#f 进程层级关系
				#o 显示指定参数,如 pid comm nice pri pcpu ppid stat user group
				
				
				#-e 显示所有进程
				#-f 显示信息的完整格式
				#-H 显示进程的层级结构
				#-o 显示指定参数
				#--sort=	按照制定参数排序,参数前添加"-"表示逆序

参数之间可以排列组合,按需添加.

ps ax

ax参数

#ps ax显示信息如下:

PID			进程id
TTY			进程用到的终端
STAT		进程状态
TIME		进程占用cpu时长
COMMAND		进程名称

如果再附加u参数

ps aux

则会得到以下结果
aux参数

#ps aux显示信息如下:
USER		进程所有人
PID			进程id
%CPU		进程使用cpu的用量
%MEM		进程所用到的内存用量
VSZ			进程使用的虚拟内存大小
RSS			进程常驻内存中的数据大小
TTY			进程用到的终端
STAT		进程状态
START		进程运行时长
TIME		进程占用cpu时长
COMMAND		进程名称

显然我们并不是任何时候都需要获取所有这些参数,因此按需获取信息也是查询的必要方法之一.

ps ax -o user,group,pid,%cpu,stat,comm --sort=%cpu
如上所示,可以按CPU占用率从小到大对所有进程进行排列显示
获取的进程信息包含所有者,所有组,进程ID,CPU占用率,进程状态,进程名

当然,当需要逆序排列时候也很简单
--sort=%cpu 改为 --sort=-%cpu 即可

进程状态

既然上面的参数提到了进程状态,还是系统的梳理一下为好.

R(TAKS_RUNNING)				##可执行态(running,ready)
S(TASK_INTRRUPTABLE)		##可唤醒休眠
D(TASK_UNINTRRUPTABLE)		##不可唤醒休眠
T(TASK_STOP)				##暂停状态
Z(EXIT_ZOMBIE)				##僵死态

进程过滤

既然刚才已经使用过ps ax了,那显然你对它到底列出了多长的进程串也有所体会,日常使用中我们大部分时候都只想找到自己想要的进程,这时候就要用到进程过滤.

pgrep				#进程过滤命令
					#-u uid		显示指定用户进程
					#-U user	显示指定用户进程
					#-t tty		显示指定终端进程
					#-l			显示进程名称
					#-a			显示进程的完整名称
					#-P			显示进程的子进程

进程过滤
同样,当我们知道进程名称时也可以使用如下指令反查进程ID

pidof 进程名称

在这里插入图片描述

动态进程查看

ps命令确实可以查询进程情况,但系统的运行是个动态的过程,监控也势必有即时的要求,一直动用watch总不是个办法,还好有原生的动态查看命令解决了这个问题.

top				##动态进程查看

top命令实现了对于进程的动态查看,但由于执行后的界面内容实在太多,专门拿出来讲可能比较好.

top的运行效果
如图,top运行后分为了上下两个部分.上半部分主要为系统的信息,下半部分就是对于进程的动态监控了.顺便一体,top命令会占用shell,在结束前不能执行其他命令.


上半部分包括了 系统时间, 当前登陆的用户数量, 1/5/15分钟内的系统平均负载, 进程总数和各个状态的进程数量, CPU占用量, 内存占用量, 交换分区的占用量
下半部分就比较直观了

参数含义
PID进程ID
USER进程的拥有者
PR进程优先级
NINICE值,也表示优先级概念
VIRT虚拟内存使用量,单位为KB
RES物理内存使用量,单位为KB
SHR共享内存大小,单位为KB
S进程状态

对于top命令附加参数方法有两种,运行前提前附加的参数以及运行中实时附加的参数.
运行前附加的参数

-d	指定刷新频率
-b	以批次方式显示
-n	指定显示的批次数量

运行中的内部参数

P		按cpu占用量排序,按两次则逆序
M		按内存占用量排序,按两次则逆序
T		累计占用cpu时间排序,按两次则逆序
l		关闭/开启uptime信息
t		关闭/开启cpu&task
s		指定刷新频率
k		操作进程
u		查看指定用户进程

进程优先级

显然,按照我们的认知,任务和任务之间的优先度是不同的,打个比方如果网络服务中断了,即使联网应用本身没有出问题显然也无法正确为你服务了.

任务的重要性是有区分的,那该如何确定任务的重要性呢?
我们采用优先级的方式对进程重要程度进行量化

“优先级”
范围: 0–139
内核自控优先级范围:0-99
用户可控优先级:100-139

同时在上文中提过NICE值的概念,并且说它也是对于优先度的反映.
nice值的范围是-20 到 19,数值越小优先级越高,反之越大越低.

那么显而易见的,我们当然可以指定进程以指定优先级运行.
当然,对于已经在运行的进程,我们也可以修改其优先级.
但是优先级只能调低不能调高,需要特别记忆.
这涉及到两条命令.

nice -n -5 vim &		##指定优先级(-5)打开进程(这里指vim)
renice -n -5 43331		##更改优先级,在这里是将43331进程的优先级改为-5

以下为举例.
修改优先级

关于进程状态的补充

S		#sleeping
<		#优先级高
s		#顶级进程
T		#stop
N		#优先级底
R		#running
+		#运行在前台

进程的前后台调用

在之前的内容中我们讲过,当你执行类似如下指令时,shell会被占用

gedit		#打开图形化的记事本

在linux系统中当然也有将前台进程放到后台和从后台转回前台的方法,具体操作如下.

<ctrl>+<z>	##把占用shell的进程打入后台挂起
bg			##把后台挂起的进程运行起来
fg			##把后台进程调回前台
&			##运行进程在后台
jobs		##查看当前shell中在后台的所有工作

以图例进行讲解.

前后台调用

进程信号相关操作

在之前讲top的内部指令时有一条是这样的.

k		操作进程

那么进程是如何操作的,进程信号又有哪些呢?
进程信号有1-20这20种,但只有以下这些是可以供我们拿来操作的.

1	#重新加载系统配置文件
2	#清空内存中的进程数据
3	#清空内存中的鼠标(ctrl+\)
9	#强行结束进程(不能被阻塞)
15	#正常关闭进程(会被阻塞)
18	#运行被暂停的进程
19	#暂停进程(不会被阻塞)
20	#暂停进程(会被阻塞的)

关于阻塞和非阻塞,可以理解为,当进程被占用不可进行操作时为阻塞,强制执行则为非阻塞,比如挂起的进程如果使用20则无法关闭,19则可以强制关闭它.

值得一提的是,暂停的进程本身依旧存在,只是暂时不接受数据了,比如你挂起了记事本,再输入信息都无法录入.但是这些信息本身并没有消失,当你运行被暂停的记事本时,刚刚输入的信息都会瞬间进入记事本窗口内.

那么知道了操作信号,就该用到以下指令对进程进行操作了.

#进程信号控制工具
kill	进程信号	pid				#对进程进行操作
killall 进程信号	进程名字			#对符合进程名的进程批量进行操作
pkill	进程信号	进程条件			#对符合条件的进程进行操作,可以指定进程所有者等等条件,相当于扩大版的killall

systemd守护进程

什么是守护进程

守护进程(daemon)是生存期长的一种进程,没有控制终端.它们常常在系统引导装入时启动,仅在系统关闭时才终止.
它们替内核分担程序控管的程序.
#通常pid为1
#systemd -----> systemctl
#systemctl 管理系统服务

systemctl命令的用法

systemctl命令是系统服务管理器指令,用于对服务进行管理.服务指在系统中开启的共享系统资源到网络中的程序.

systemctl start 进程名							##开启服务
systemctl stop 进程名							##关闭服务
systemctl status 进程名							##查看服务状态
systemctl reload 进程名							##重新加载指定服务
systemctl restart 进程名							##重新启动服务
systemctl enable 进程名							##设定服务开机启动
systemctl enable --now 进程名					##设定服务开机启动并开启服务
systemctl disable 进程名							##设定服务开机不启动
systemctl disable --now 进程名					##设定服务开机不启动并结束服务
systemctl list-units							##查看系统所有服务当前状态
systemctl list-unit-files						##查看服务开机状态
systemctl list-dependencies						##列出服务依赖性
systemctl mask 进程名							##冻结指定服务
systemctl unmask 进程名							##解锁指定服务
systemctl set-default							##设定系统运行模式
												#multi-user.target   无图形网络模式
												#graphical.target    有图形的网络模式
systemctl get-default							##查看系统运行模式

进程操作
对服务的管理也常用于对于服务端的管理中.
提到服务端就一定会牵扯到C/S架构,即服务端与客户端的区别.
一般认为提供服务的主机为服务端,使用功能的为客户端.

系统中的登陆审计

提到了服务端,自然也会想到远程控制和远端登陆.
事实上,每一次SSH连接都会在被连接主机上进行记录,我们也可以通过以下指令对当前连接用户和历史连接情况进行查看.

w			##显示正在登陆系统的账号
			## -i	显示登陆来源
			#/var/run/utmp		对应的文件位置

last		##登陆成功现在已经退出的
			##/var/log/wtmp		对应的文件位置

lastb		##试图登陆但未成功
			##/var/log/btmp		对应的文件位置

登陆状况
登陆失败的记录

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值