linux系统的进程管理

1.什么是进程?

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

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占用情况


(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 & 不会占用终端
 不是所有的程序都会占用终端

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)用什么控制服务?

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

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

systemd 系统初始化进程
pstree 显示系统的进程树
(4)进程控制命令:
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    设定系统启动级别为图形模式
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值