复习之Linux系统中的进程管理

1.什么是进程?线程?

进程(Process):是操作系统进行资源分配的最小单位。一个进程是一个程序的一次执行过程。每启动一个进程,操作系统就会为它分配一块独立的内存空间,用于存储PCB、数据段、程序段等资源。每个进程占有一块独立的内存空间。

线程(英语:thread)是操作系统能够进行运算调度的最小单位。线程是进程的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

通俗解释:一个进程指的是一个正在执行的应用程序。线程的功能是执行应用程序中的某个具体任务,比如一段程序、一个函数等。程序执行流是从上倒下贯穿运行的。

线程和进程之间的关系,类似于工厂和工人之间的关系,进程好比是工厂,线程就如同工厂中的工人。一个工厂可以容纳多个工人,工厂负责为所有工人提供必要的资源(电力、产品原料、食堂、厕所等),所有工人共享这些资源,每个工人负责完成一项具体的任务,他们相互配合,共同保证整个工厂的平稳运行
每个进程执行前,操作系统都会为其分配所需的资源,包括要执行的程序代码、数据、内存空间、文件资源等。一个进程至少包含 1 个线程,可以包含多个线程,所有线程共享进程的资源,各个线程也可以拥有属于自己的私有资源。

2.进程的5种状态

在linux系统中,进程有5种状态,分别是:

R(TAKS_RUNNING)  : 可执行态

S(TASK_INTRRUPTABLE)  :可唤醒休眠

D(TASK_UNINTRRUPTABLE) :不可唤醒休眠

T(TASK_STOP) :暂停状态

Z(EXIT_ZOMBIE) :僵死态

下面详细介绍每一种状态:

(1)R(TAKS_RUNNING)  : 可执行态

正在运行或者就绪队列中等待运行的进程。此时进程资源已经准备就绪,就等运行。一个进程处于RUNNING并不代表他一定在被执行,由于在多任务系统中,各个就绪进程需要并发执行,所以某个特定时刻,这些处于RUNNING状态的进程中,只有一个能得到处理器,而其他进程必须有一个就绪队列中等待,即使在多处理器的系统中,linux只能同时让一个处理器执行任务。

(2) S(TASK_INTRRUPTABLE)  :可唤醒休眠

处于这种状态的进程在等待队列中,当资源有效时,可以由操作系统进行唤醒,与不可唤醒休眠状态区别是:处于此状态中的进程也可以被其他进程所唤醒(可以被其他进程通过信号来唤醒,或者通过操作系统的wake_up()唤醒);唤醒后即可转为可执行态。

(3) D(TASK_UNINTRRUPTABLE) :不可唤醒休眠

处于这种状态的进程正在等待队列中,当资源有效时,可以由操作系统唤醒(通过wake_up()调用唤醒),否则一直处于等待状态;一般而言,Linux中如果我们等待的是磁盘资源,当进程等待磁盘资源拷贝写入的过程,此时进程处于阻塞状态,这种进程阻塞状态就是D状态(不可被中断),操作系统也不能杀掉该进程,只能等D状态进程自己醒来。等待磁盘给回应才能醒来。

(4) T(TASK_STOP) :暂停状态

停止运行(STOPPED),也就是挂起状态,进程被暂停,需要通过其它进程的信号才能被唤醒

(5) Z(EXIT_ZOMBIE) :僵死态

程序退出后的中间等待处理状态。表示进程结束但尚未消亡的一种状态,此时进程已经结束运行并释放掉大部分资源,但尚未释放进程控制块。

Z状态是一种已经死亡的状态,但是死了之后,不要让操作系统释放它。那该状态存在的意义是什么呢?当一个Linux中的进程退出的时候,一般不会直接进入X状态(死亡,资源可以立马回收),而是进入Z状态,为什么?

因为进程被创建出来一定是要有任务完成,当进程退出的时候,我们怎么知道进程把任务给我们完成了呢?需要将进程的执行结果告知给父进程或者操作系统。

子进程退出,维护Z状态,就是为了让父进程或者操作系统来读取执行结果!父进程和操作系统通过进程等待来读取僵尸进程的信息

 僵死状态是一个比较特殊的状态。当进程退出并且父进程(使⽤用wait()系统调⽤)没有读取到子进程退出的返回代码时就会产生僵死(尸)进程。僵死进程会以终⽌止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码。所以只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入Z状态。

3.图形方式查看进程

(1)鼠标点击桌面查看

utilities-----> system moniter  :  即可查看进程

(2)gnome命令查看

#  gnome-system-monitor

 4.PS命令详解

PS命令是Process Status的缩写,是在Linux中是查看进程的命令。可以用ps这个命令来获取进程的运行状态和管理进程。

在linux系统中,ps命令有为三种执行风格:

  • Unix风格:参数前加单破折线,来源于贝尔实验室开发的AT&T Unix系统
  • BSD风格:参数前不加破折线,来源于加州大学伯克利分校开发的一个Unix系统
  • GNU风格:参数前面加双破折线,来源于GNU计划&Linux内核的Linux系统

# man ps  : 查看ps命令的帮助

 (1)Unix风格

参数作用
-e显示所有进程
-f显示信息的完整格式
-H显示进程的层级结构
-o显示指定参数
--sort排序

# ps  -e : 显示所有进程

# ps  -f  : 显示信息的完整格式

 

#  ps  -H  : 显示进程的层级结构

 

# ps  -o  指定信息  : 显示指定信息

 

# ps     -eo    %cpu      --sort  = %cpu :升序排列所有进程的cpu信息

参数说明

参数作用
UID运行这个进程的用户(如果该用户名过长,会显示成用户id)
PID进程ID
PPID父进程ID(有时我们要干掉一个进程总是失败,这是我们要考虑是不是要干掉它的父进程)
C该进程生命周期的CPU利用率(CPU使用时间/进程运行时间*100%,单位%)
STIME进程启动该时的系统时间(进程的启动时间,时间较久显示日期,当天的显示具体时间HH:MM)
TTY进程启动时的终端设备(?表示没有终端)
TIME运行进程需要的累计CPU时间(就是到目前为止该进程使用CPU一共多久了)单位[dd]-hh:mm:ss
CMD启动进程的命令

 (2)  BSD风格

参数作用
f进程层级关系
a显示跟任意终端关联的所有进程(当用户登陆系统后产生的进程都是带终端的)
x显示所有的进程,甚至包括未分配任何终端的进程
r仅显示运行中的进程
u采用基于用户的格式显示
o显示指定参数
p显示指定pid的进程

# ps  f  :  显示层级关系

#  ps  a  :  显示跟终端相关的进程

 # ps  x  : 显示所有进程,内容包括ps  a 的显示结果

 # ps  r :  仅显示运行中的进程

 # ps  u : 用户信息归类的查看方式

#  ps o  指定参数 : 显示指定参数

 

# ps p pid : 显示指定pid的进程

 # ps  aux : 以用户格式显示所有进程

参数说明
对比Unix风格,主要多出了几个参数

参数作用
VSZ进程在内存中的大小,单位KB
RSS进程在未换出时占用的物理内存
STAT代表当前进程状态的双字符状态码
第一个字符:S休眠 R运行
第二个字符:<高优先级进程 N低优先级进程 L有页面锁定在内存 s控制进程 l多线程进程 +前台进程

5.pgrep 和 pidof 命令详解

(1)pgrep命令

pgrep命令以名称为依据从运行进程队列中查找进程,并显示查找到的进程id。

# pgrep  -u  uid : 显示指定uid用户的进程id

# pgrep  -U  用户名 :显示指定用户的进程id

 # pgrep  -t  终端名 :显示指定终端进程id

 # pgrep  -lU   westos  : 显示westos用户的进程id及名称,顺序一定!l在U前!

#pgep   -lt  pts/1 : 显示终端的进程id及名称

# pgrep  -alU   westos  : 显示westos用户的进程id及完整名称,顺序一定!l在U前!

#pgep   -alt  pts/1 : 显示终端的进程id及完整名称

# pgrep    -P  父进程号 :显示子进程id

首先在 shell-1  产生子进程 cat ,并查看父进程id

 在shell-2 查看该子进程的id

 在shell-3 利用pgrep 命令显示子进程的id,与上完全一致!证明该命令显示的是

id为7026的子进程的id

 (2)pidof命令

pidof命令用于查找指定名称的进程的进程号id号。

# pidof  进程名 : 显示该进程的进程id

首先在shell-1 打开cat 进程,在shell-2打开vim进程

在shell-3利用pidof命令查看j进程id

6.top命令的用法

top命令经常用来监控linux的系统状况,是常用的性能分析工具,能够实时显示系统中各个进程的资源占用情况。

(1)top输出参数含义

#  top : 实时显示进程的资源占用情况。

 1)前5行参数信息

# 第一行 :任务队列信息

内容含义
 20:35:56当前时间
up 41 min系统运行时间 格式为时:分
 2 users当前登录用户数
load average: 0.00, 0.01, 0.05系统负载,即任务队列的平均长度。 三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。

# 第二行:任务状态信息统计

内容含义
 218 total进程总数
 1 running正在运行的进程数
217 sleeping睡眠的进程数
0 stopped停止的进程数
0 zombie僵尸进程数

# 第三行:cpu信息

内容含义
 0.5 us用户空间占用CPU百分比
0.3 sy 内核空间占用CPU百分比
0.0 ni 用户进程空间内改变过优先级的进程占用CPU百分比
98.2 id空闲CPU百分比
0.0 wa 等待输入输出的CPU时间百分比
0.0 hi硬中断(Hardware IRQ)占用CPU的百分比
 0.0 si软中断(Software Interrupts)占用CPU的百分比
0.0 st用于有虚拟cpu的情况,用来指示被虚拟机偷掉的cpu时间。

# 第四行:内存信息

内容含义
2046936 total物理内存总量
445784 free空闲内存总量
683564 used使用的物理内存总量
917780 buff/cache用作内核缓存的内存量

# 第五行:交换区信息

内容含义
2097148 total交换区总量
2097148 free空闲交换区总量
0 used使用的交换区总量
860784 avail Mem代表可用于进程下一次分配的物理内存数量

2)进程信息

列名含义
PID进程id
USER进程所有者的用户名
PR优先级
NInice值。负值表示高优先级,正值表示低优先级
VIRT进程使用的虚拟内存总量,单位kb
RES进程使用的、未被换出的物理内存大小,单位kb
SHR共享内存大小,单位kb
S进程状态
%CPU上次更新到现在的CPU时间占用百分比
%MEM进程使用的物理内存百分比
TIME+进程使用的CPU时间总计,单位1/100秒
COMMAND命令名/命令行

(2)top内部指令

在top命令显示的页面还可以输入以下按键执行相应的功能(注意大小写区分的):

  • ?:显示在top当中可以输入的命令 
  • P:以CPU的使用资源排序显示 
  • M:以内存的使用资源排序显示 
  • N:以pid排序显示 
  • T:由进程使用的时间累计排序显示 
  • k:给某一个pid一个信号。可以用来杀死进程 
  • r:给某个pid重新定制一个nice值(即优先级) 
  • q:退出top(用ctrl+c也可以退出top)

(3)top命令参数

  • -d:指定刷新频率,表示top命令显示的页面更新一次的间隔。默认是3秒。
  • -b:以批次方式显示,静态输出。
  • -n:指定显示的批次数量,与-b结合使用。
  • -p:指定特定的pid进程号进行观察。

 7.进程的优先级

(1)优先级的概念

系统是多任务多用户的操作模式,任务的重要性是有区分。一般根据进程的优先级来确定任务的重要性。具体来说:

  • cpu分配资源的先后顺序就是优先级
  • 优先权高的进程有优先执行的权利
  • 可以让进程运行在指定的cpu上,改善系统整体性能

(2)优先级的范围

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

 我们只能更改用户可控优先级,即100-139!

nice值是反应一个进程“优先级”状态的值,其取值范围是-20至19,一共40个级别。这个值越小,表示进程”优先级”越高,而值越大“优先级”越低。

由nice的范围,可以推出pri的范围:

命令含义
nice-20~19
pri39~0
priority100~139

(3) 更改进程的优先级

#  renice   -n   -5   进程id  :    更改进程的优先级
#  nice   -n   -5    进程名  :    指定优先级打开进程

 (4)优先级相关的stat状态信息

#  ps   -o   pid ,  nice , stat ,  comm  :关注stat那一列

8. 进程的前后台调用

linux系统中有些命令会占用shell,我们可以将它打入后台刮起。eg:cat ,vim ,gedit

# <  ctrl > + < z >  :  把占用shell的进程打入后台挂起

# jobs : 查看当前shell在后台的所有工作

 # bg  序号:把后台挂起的进程运行起来

# bg :  默认在后台运行有“+”号的进程

ps:有些进程可以执行后台运行操作,但会立即停止。因为运行需要界面支持,例如cat,vim命令。

# fg  序号:把指定的后台的进程调回前台

# fg  : 把后面有“+”的进程调回前台

 # 命令   & :直接运行进程在后台,不占用shell(有些命令无法后台运行,cat ,vim)

 如果向结束在后台的进程,有两种方法:

1)将进程调回前台,在<ctrl>+<c>结束进程

2)#  killall  -9  进程名 : 结束指定进程

 9.进程信号的理解

(1)进程信号的含义

利用# man  7 signal 可以查看进程信号的含义

具体的如下表:

(2)进程信号控制工具

#  kill   进程信号   pid : 精准结束指定进程


#  killall   进程信号 进程名字 :批量结束进程


#  pkill   进程信号 进程条件 :按条件结束进程

(3)进程信号实验理解

#  kill   -2   6332 :清空该内存中的进程数据

ps: 输入命令后,一串字符后出现c(等于按了ctrl c),表示该数据被清空

 # < ctrl > + < \ >  :  鼠标消失,动一下就恢复了!(看视频全屏鼠标消失)

 # kill  -15  id :正常关闭进程,会被阻塞。

#  kill  -9  id : 强行结束进程,不会被阻塞。

ps:因为kill -15信号只是通知对应的进程要进行"安全、干净的退出",程序接到信号之后,退出前一般会进行一些"准备工作",如资源释放、临时文件清理等等,如果准备工作做完了,再进行程序的终止。但是,如果在"准备工作"进行过程中,遇到阻塞或者其他问题导致无法成功,那么应用程序可以选择忽略该终止信号。kill -9 是强制杀死一个进程,不管这个进程有多重要。

 # kill    -18  id :  运行被暂停的进程

 # kill   -19  id : 暂停进程,不会被阻塞

# kill  -20  id : 暂停进程,会被阻塞

当运行被暂停的进程后,刚刚输入没出现的字符立即出现!

 10.守护进程

(1)守护进程定义

Linux守护进程是一类在后台运行的特殊进程,用于执行特定的系统任务。很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭。另一些只在需要的时候才启动,完成任务后就自动结束。

(2) 实验环境设定

在虚拟机中添加与主机同一网段的ip:172.25.254.173

主机:172.25.254.73

具体添加步骤如下:

 

 

 

 添加成功后用ip  a  查看是否添加成功!

添加成功后,用虚拟机ping主机,一般可以ping通,但是这里我出了问题了! 虚拟机和主机相互无法ping通!

在同一网段一般可以ping 通,不用设置dns,网关.....

 首先关闭防火墙,selinux,结果还是无法ping通,后来设置了桥接模式顺利解决!

 保存后再次尝试ping,发现ping通拉!

 ping通后我们利用ssh远程操作虚拟机!

# ssh  -l  root  172.25.254.173 : 远程连接到173虚拟机的root用户

之所以能连接是因为支持sshd这个服务!

 (3) symtemctl 管理系统服务(以sshd服务为例)

systemctl 命令的含义如下:

命令含义
start开启服务
stop关闭服务
status查看状态
reload重新加载
restart重新启动服务
enable设定服务开机自启动
disable设定服务开机不启动
enable  --now设定服务开机启动并当前开启服务
diaable  --now设定服务开机不启动并当前关闭服务
list-units查看系统所有服务当前状态
list-unit-files查看服务开机状态
list-dependencies列出服务的依赖性
mask冻结服务
unmask解冻服务

# systemctl  status  sshd : 查看sshd服务的状态

ps:可以看出该服务是开启的,所以主机才能ssh 虚拟机

 # systemctl  stop  sshd : 关闭sshd服务

 关闭sshd服务后,再次用真机ssh虚拟机,发现无法连接!

  # systemctl  start  sshd : 开启sshd服务

 # systemctl  restart  sshd : 重新启动服务,先stop再start(id变了)

  # systemctl  reload  sshd : 重新加载服务,id不变!

 # systemctl  enable   sshd :设定服务开机启动

 # systemctl  disable   sshd :设定服务开机不启动

# systemctl  able   --now   sshd :设定服务开机启动并当前开启服务

# systemctl  disable   -- now  sshd :设定服务开机不启动并当前关闭服务

 # systemctl  list-units  : 查看系统所有服务当前状态

 # systemctl  list-unit-files : 查看系统所有服务当前状态

# systemctl   list-dependencies  sshd : 列出sshd服务的依赖性

 # systemctl  mask  sshd : 冻结服务

ps:冻结服务后无法通过start开启服务,必须解冻才可以!

# systemctl  unmask  sshd : 解冻服务!

# systemctl get-default :查看系统的运行级别

# runlevel : 查看运行级别---数字版 (一共有7个运行级别)

# init  6 : 重启  # init 5 : 开启有图形运行

运行级别含义
0关机
1单用户
2-4无图形
5有图形
6重启

# systemctl set-default multi-user.target :设定默认运行模式为无图形模式

# systemctl set-default graphical.target :设定默认运行模式为有图形模式

11. 系统登陆审计体系

统计登陆系统的账号信息

#  w : 显示正在登陆系统的账号

# w  -i :显示登陆系统账号的来源

ps:此时显示的是/var/run/utmp里的信息

 # last : 显示过去登陆成功的账号,现在已经退出

ps:此时显示的是 /var/log/wtmp里的信息

# lastb : 显示尝试登陆没成功的账号!

ps:此时显示的是/var/log/btmp里的信息

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值