linux下的进程管理

1.什么是进程?

我的理解

程序正在运行的状态为进程 ,也就是cpu未完成的工作
进程是正在运行的程序的实例,程序并不是进程
进程就是系统未完成并正在进行的工作

官方定义

程序放置在存储媒体中(硬盘、光盘、软盘、磁带等),以实体文件的形态存在
进程:程序被触发后,执行者的权限与属性、程序的程序码与所需数据等都会被载入内存中
操作系统会给内存内的单元一个识别码( PID),也就是说,进程是一个正在运行当中的程序

举例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

错误认知/bin/watch 该二进制文件里面记录了产生进程的程序 ,并不是进程
正确认知/bin/watch -n 1 date 为开启一个进程,程序被运行起来为进程,在cpu和内存中存放

注意:应学会运行一个进程并且查看该进程的各种信息 ,例如:processes

知道了什么是进程以后,接下来我们一起看看和进程相关的一些内容吧!

2.进程的基本实验环境

和进程相关的实验操作是在一台虚拟机当中进行,我使用desktop虚拟机
在真机里面开启一台虚拟机的操作如下:
在这里插入图片描述
在这里插入图片描述

3.进程运行的状态

R( running)表示此进程正在使用当中
S(sleep)睡眠状态,将一个进程最小化时,相当于该进程被优化了,可以直接被唤醒
Z(zombine )僵尸状态 ,该进程占用系统资源并不为系统服务,属于异常状态
T(stop)停止状态,可能是被控制或者出错了,不能直接唤醒,但可以用命令强制唤醒
D不可被唤醒的睡眠状态,通常是进程可能在等待I/O的情况下

比如:
在这里插入图片描述
在这里插入图片描述

注意

  可以直接在进程图形界面中查看
  一个进程停止不等于进程结束

4.如何查看系统的进程?

有两种方式:图形方式和命令方式

图形方式和命令方式的区别在于:
图形方式展示的进程为图形界面
命令方式展示的进程为shell里面的文本模式

(1)图形方式查看进程
直接在shell里面输入命令:gnome-system-monitor 回车即可看到进程
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
(2)命令方式查看进程

在shell里面输入相应的命令即可查看相应的进程信息

采用ps命令 ,可以用 man ps来查看它的使用方法在这里插入图片描述

ps ##ps自己所在的shell里面运行的进程
在这里插入图片描述

ps a ##在shell当中运行的所有进程,包括shell的环境bash
在这里插入图片描述

ps -a ### 在shell当中运行的所有进程,不包括shell环境本身信息bash
注意:所有shell的环境一样,具体id不一样
在这里插入图片描述

ps -A ###系统当中所有的进程,与shell无关
在这里插入图片描述

ps -d ###与A类似 ,没有允许环境(shell)
在这里插入图片描述

ps -e ###显示进程的扩展信息(系统资源),与-A 差不多
在这里插入图片描述

ps x ###显示所有输出设备终端的进程
在这里插入图片描述

ps -u ###显示用户信息 ,id等等 ,终端 ,各种时间
在这里插入图片描述
ps -f ###显示副级进程以及子进程

在这里插入图片描述

(3)用来查看进程的常用的ps组合
ps aux ##显示系统当中的所有进程并显示进程用户
在这里插入图片描述
ps ef ##显示进程的详细信息以及进程的父子关系
在这里插入图片描述
ps ax ##显示当前系统当中的所有进程
在这里插入图片描述
pstree ##显示当前系统的进程树
在这里插入图片描述

    并不是父级进程结束以后子进程一定会结束  
    剩下的子进程叫孤儿进程 ,因为父级进程被强行关闭 ,这样会影响系统的正常运行
    正常应该先结束子进程,再结束父进程
    一般由系统的初始化程序来控制其他进程的开始和结束
    可以用pstree查看系统的进程树(父进程和子进程关系一目了然)
    systemd为初始化程序,是所有程序的父级程序,不会自己关闭结束自己,只有关机才可以,或者结束了所有子进程以后,该初始化进程才会被关闭

(4)显示进程的指定信息

命令格式: ps -o xxx 显示进程的指定信息

xxx可以为以下内容:

      comm  进程名称
      user   进程所有人
      group  进程所有组
      %cpu  进程cpu使用率
      %men  进程内存使用率
      pid   进程的id
      nice  进程优先级

###ps -o comm(名字)
在这里插入图片描述
###ps -o user(所有人)
在这里插入图片描述
###ps -o group(所有组)
在这里插入图片描述
###ps -o %cpu
在这里插入图片描述
###ps -o %mem (内存)
在这里插入图片描述
###ps -o pid(id号码)
在这里插入图片描述
###ps -o nice(优先级)
在这里插入图片描述
###tty为所处环境,stat为所处状态
在这里插入图片描述
(5)进程排序

命令格式为:ps ax --sort=要显示的东西

ps --sort=%cpu
在这里插入图片描述
ps -A --sort=%cpu
在这里插入图片描述
ps -A --sort=%cpu -o %cpu
在这里插入图片描述
ps -A --sort=%mem -o %mem
在这里插入图片描述

总结:
ps  ax     --sort=%men        -o %men(升序)
ps  ax     --sort=-%men       -o %men(降序)
ps  ax      --sort=%cpu        -o %cpu(升序)
ps  ax     --sort=-%cpu        -o %cpu(降序)
第一部分表示显示所有进程   
第二部分表示对mem内存或者cpu占用进行排序, -表示降序 
第三部分表示只显示mem内存或者cpu占用情况

面试题:memory +5 pid 显示内存当中pid的前五个
命令: ps -A --sort=-%mem -o %pid |head -n 6 | tail -n 5
在这里插入图片描述
命令:ps -A --sort=-%mem -o pid |head -n 6 | tail -n 5
在这里插入图片描述

(6)进程的stat中显示的信息含义
在这里插入图片描述

S进程状态
s没有父进程,顶级进程
l在内存当中有锁定空间(进程结束之前不会被系统回收)
+正在前台运行的进程
N表示优先级低
<表示优先级高

5.进程的优先级

(1)进程的优先级范围: -20~19
(2)优先级的查看:ps ax -o pid,nice,comm
在这里插入图片描述
(3)怎样调整进程的优先级?

方法一:图形调整进程的优先级,直接在进程的图形界面里面调整数字

大数字 : 表示优先级低  S后会出现N
小数字(可以是负数): 表示优先级高  S后会出现<
所以N表示优先级低
<表示优先级高

在这里插入图片描述
方法二:命令设定进程优先级,以下都是直接在shell里面输入命令即可

指定某个优先级开启进程(先指定,后开启)
nice -n 优先级数字 进程名称
比如:nice -n -5 vim 开启vim并且指定该程序的优先级为-5
在这里插入图片描述
改变进程的优先级(先开启,后改变)
renice -n 优先级数字 进程pid
renice -n -5 1542 改变1542进程的优先级为-5
在这里插入图片描述

改变进程的优先级:renice -n 4 进程名字;进程pid  将该进程的优先级改为4, ,先开启进程 ps查看 ,再renice 再ps查看看有没有改变优先级
监控进程:watch -n 1 ps -o stat,comm,pid,nice(nice表示优先级)
watch -n 1 ps a -o stat,comm,pid,nice 先指定优先级 再开启进程 用ps查看即可
指定进程的优先级:nice -n 1 进程名字 ,直接指定该进程的优先级,该进程并没有启动

renice命令的实验过程:
步骤一:先开启进程, 直接在desktop主机的shell当中输入 firefox
在这里插入图片描述
步骤二:监控进程 watch -n 1 ps -o stat,comm,pid,nice(nice表示优先级)在这里插入图片描述
步骤三:用renice -n 10 2176(更改所要设定的进程的id号,改变优先级)
在这里插入图片描述
在这里插入图片描述

nice命令的实验过程:
步骤:nice -n -5 firefox(开启的同时指定优先级)
nice后面跟的firefox(进程名)开启进程
只有nice是不能开启进程的
用nice先告诉系统firefox的进程到底重不重要(给它优先级)
再开启firefox ,查看的时候就是 -5 了
在这里插入图片描述
注意

  同一个shell当中的两个窗口优先级互不影响
  多个shell当中的优先级互相影响
  系统当中只能有一个firefox的进程 ,一个进程开启了多个界面

6.环境中进程的前后台调用:

(1)前后台调用的常用命令:

jobs查看被打入环境后台的进程
ctrl+z把占用终端的进程打入后台
fg+jobsnum把后台的进程调回前台
bg+jobsnum把后台暂停的进程运行起来
comm+&让命令直接运行在后台

(2)具体步骤如下:
步骤一:先用在desktop主机中输入gedit 或者 firefox, 此进程会占用终端,使终端不能使用
在这里插入图片描述
gedit编辑模式占用终端

步骤二:直接在shell脚本输入 ctrl+z 打入后台
在这里插入图片描述

 ctrl+z将该进程直接打入后台(挂在后台不再运行)
 如果使用gedit &打入后台它在后台还是运行的

步骤三:输入jobs查看被打入后台的进程
在这里插入图片描述
步骤四: fg 数字 ,将被打入后台的进程调回前台(终端)
在这里插入图片描述
步骤五:bg 数字 ,将被打入后台的暂停的进程运行起来
在这里插入图片描述
步骤六:使用 comm(名字) &, 让命令直接在后台运行
在这里插入图片描述

 先打入后台的优先级低,后打入后台的优先级高
 优先处理和优先调用不一样
 ctrl + z把前台正在运行的程序打入后台
 +表示正在运行  , -表示为次优先
 如果没有+(把一个进程调回前台) , -就会被自动变为+(优先级提高)
 vim 不能在后台运行, 也就是 vim & 不会占用终端
 不是所有的程序都会占用终端

在真机里面可以演示:
eject /dev/sdb1可以完全把u盘弹出
在这里插入图片描述
在这里插入图片描述
eject 弹出光驱

在这里插入图片描述

7.常用进程信号:

(1)常用信号等级:
每个信号代表的意思如表下所示

1进程重新加载配置,进程不会关闭(意义重大)
2删除进程在内存中的数据
3删除鼠标在内存中的数据
9强行结束单个进程(不能被阻塞)
15正常关闭进程(可能会被阻塞)
18运暂停的进程
19暂停某个进程(不能被阻塞)
20把进程打入后台(可以被阻塞)
man 7 signal查看信号详细信息

在这里插入图片描述

kill   -信号  进程的pid(结束这个信号 ,精准处理)
killall -信号 进程名字(可以批量结束) 比如:killall -2  vim
pkill -u student -信号 (结束所有普通用户student) ,对用户进程进行处理 比如:pkill -9 -u student

kill -信号 进程的pid(结束这个信号 ,精准处理)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

killall -信号 进程名字(可以批量结束)
在这里插入图片描述
pkill -u student -信号 (结束所有普通用户student) ,对用户进程进行处理 比如:pkill -9 -u student
在这里插入图片描述
pkill -9 -P 父级pid (强制结束父级进程下的所有进程)
在这里插入图片描述

pkill -15 -P 父级pid (可能会被阻塞)
在这里插入图片描述
在这里插入图片描述
进程不能随便关闭,否则会造成很大的损失
注意:ctrl + / 清除鼠标

8.进程的动态监控:

(1)动态监控使用top命令
top 后面的参数如下表所示:

1(小写l)显示cpu每个核的负载
s调整刷新频率
ccpu负载排序
m内存使用量排序
h查看帮助
u查看指定用户进程
k对指定信号发起进程
q退出

(2)实验操作如下:
实验步骤

先再shell里面输入top命令,对进程进行实时监控
然后输入相应的字符对其进行动态查看(可以调整动态查看的参数)
回车相当于手动刷新

##输入top动态监控如下:
在这里插入图片描述
##按下 1 显示cpu每个核的负载
在这里插入图片描述
##按下 s 调整刷新频率
在这里插入图片描述

##按下 c cpu负载排序
在这里插入图片描述
##按下 m 内存使用量排序
在这里插入图片描述

##按下 h 查看帮助
在这里插入图片描述
##按下 u 查看指定用户进程
在这里插入图片描述
##按下 k 对指定信号发起进程
在这里插入图片描述

在这里插入图片描述##按下q , 退出
在这里插入图片描述

9.控制服务

(1)服务是什么?
服务也是进程,是多个进程的集合
对自己没有意义,但对客户有意义

说明:要区分客户端和服务端
客户端:要分享别人,连接方
服务端:远程的主机,可以共享资源 (前提是安全共享),被连接方

(2)搭建实验环境
步骤一:先在虚拟机desktop里面进行网络配置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

==注意:==添加网络时不能有空的
在这里插入图片描述

注意:此时添加的和查看的ip均为172.25.251.111,说明配置网络成功

步骤二:在真机里面ping一下虚拟机,看是否能够ping通
在这里插入图片描述
注意:能ping通,再次说明网络配置成功

步骤三:在ping通的基础上使用真机远程连接控制虚拟机(具体命令讲解在sshd服务里面)
连接时要注意书写的格式,用户可以为虚拟机desktop任意一个存在的用户,ip地址是虚拟机的,(记住拿谁家的钥匙开谁家的门)
在这里插入图片描述
步骤四:在客户端(真机连接虚拟机的那个shell)切换到桌面 cd Desktop,然后touch file
直接可以看到真机可以控制虚拟机,建立文件,说明真机可以远程控制虚拟机了
在这里插入图片描述(3)用什么控制服务?

采用系统初始化进程对服务进行相应的控制

(4)当前系统初始化进程是什么?

systemd 系统初始化进程
pstree 显示系统的进程树

(5)进程控制命令:

###systemctl 服务控制命令(服务相当于进程)
在真机的客户端shell中输入systemctl,可以看到desktop虚拟机的相关服务
在这里插入图片描述

systemctl status sshd    查看服务状态,inactive(不可用),active(可用)
systemctl start sshd     开启服务
systemctl stop sshd      关闭服务
systemctl restart sshd   重启服务
systemctl reload sshd    重新加载服务配置
systemctl enable sshd    设定服务开机启动
systemctl disable sshd    设定服务开机不启动
systemctl list-units        列出已经开启服务当前状态
systemctl list-unit-files   列出所有服务开机启动的状态 disable enable static
systemctl list-dependencies   列出服务的依赖性(列出进程树,也就是父子关系,可以看出依赖性)
systemctl set-default multi-user.target  设定系统启动级别为多用户模式(无图形)
systemctl set-default graphical.target    设定系统启动级别为图形模式

###在客户端输入 systemctl status sshd 查看服务状态,inactive(不可用),active(可用)
在这里插入图片描述###systemctl start sshd 开启服务在这里插入图片描述
###systemctl stop sshd 关闭服务
在这里插入图片描述
###systemctl restart sshd 重启服务在这里插入图片描述
###systemctl reload sshd 重新加载服务配置
在这里插入图片描述
###systemctl enable sshd 设定服务开机启动
在这里插入图片描述
###systemctl disable sshd 设定服务开机不启动
在这里插入图片描述
###systemctl list-units 列出已经开启服务当前状态
在这里插入图片描述###systemctl list-unit-files 列出所有服务开机启动的状态 disable enable static
在这里插入图片描述

###systemctl list-dependencies 列出服务的依赖性(列出进程树,也就是父子关系,可以看出依赖性)
在这里插入图片描述
###systemctl set-default multi-user.target 设定系统启动级别为多用户模式(无图形)

在这里插入图片描述###systemctl set-default graphical.target 设定系统启动级别为图形模式
在这里插入图片描述
注意:

sshb是举的一个例子,也可以操作其他服务
running(未退出), exited(退出)  ,二者均为运行状态,只是退出和没退出的区别
所有的服务状态如下: static disable enable masked(一共四种)
将mask(封锁)改为unmask(解锁) 命令为 :systemctl unmask   服务名(进程名) ,即可解锁
然后该服务的状态变为tatic disable enable这三个当中的任意一个

具体解锁步骤如下
步骤一:先systemctl list-unit-files 列出所有服务开机启动的状态 disable enable static masked
在这里插入图片描述

步骤二:把masked被锁住的变为解锁systemctl unmask 服务名(进程名)
在这里插入图片描述
步骤三:恢复被锁住的状态用systemctl mask 服务名(进程名)
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值