LInux基础之(五)之进程管理

本文深入讲解了进程的概念、状态及管理方法,包括进程信号、优先级设置、工作管理和监控工具等,助您全面掌握Linux环境下进程管理的核心技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、进程的相关概念

      程序:以物理状态存储的实体的状态形式的文件!

      进程:程序被触发后,系统会将执行者的权限和属性、程序的代码、以及与所需的数据都加载到内存中,专门开辟一块区域,

操作系统并给予这个内存内的单元一个标识符(PID),通俗的讲就是一个系统中为完成并且正在运行的程序!

     说明1:程序何时被触发--->执行一个命令或程序!

     说明2触发指令的身份和执行命令的身份可能不匹配(特殊权限)!

     说明3:此块区域的内存除了加载自身的数据外,要加载相应的依赖文件!

 ##########################################

二、查看进程的状态

   1)通过资源管理器查看!

gnome-system-monitor

    2)进程的5种状态

1. 运行(正在运行或在运行队列中等待)

2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)-->可被唤醒的休眠状态

3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)-->I/O阻塞

4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)

   说明:程序已经终止,但无法移除进程至内存外-->httpd的例子!

5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)

简单测试:

(1)bash终端命令行开启firefox

(2)资源管理器查看firefox进程的状态---->Running

(3)firefox最小化,此时用资源管理器查看进程的状态-->Sleeping(不占用cpu的资源)

(4)对(1)步骤的firefox执行【ctrl-z】此时用资源管理器查看进程的状态-->Stopped-->铅色(输入不了内容)

后续:僵尸进程和孤儿进程

孤儿进程:httpd服务的案例

演示思路

(1)首先安装该服务软件,然后开启服务

(2)查看此服务的进程:ps ax |grep http-->发现一个监护人和多个员工

(3)干掉监护人(主)进程,然后看系统中的http进程-->ps ax |grep http

(4)此时默认httpd服务关闭,"重新开启(restart)"发现开启不了,也删除不了!

(5)解决办法:killall -9 httpd -->根据服务的名字杀死子进程!

(6)重新开启,看其状态!

孤儿进程:受系统程序初始化程序控制

###############################################

三、命令行查看进程的状态

    1)ps (常用

a:显示终端上的所有进程(不一定是同一个终端),包含其他用户的进程,主要是通过"命令行开启"的进程!

x:显示没有终端控制的进程,主要是后台进程(与终端无关,主要是后台守护进程)!

用法:常常是ax结合使用

-a:与a相比少两个进程(与环境信息无关,终端颜色的进程和当前开启的bash进程)

u:按照用户的排列展示进程的用户信息!

f:进程的父子调用继承关系

常用组合

aux    -->显示系统中所有进程并显示进程的"用户信息"

ef     -->显示进程中详细的信息并显示进程的父子关系

ax     -->显示当前系统中的所有进程信息

  defunct-->僵尸进程--->通过ps查看系统进程看是否有此关键字

  pstree:显示当前系统的进程树 -->systemd是顶级进程,早期用此来控制相应的服务!-->加上-p参数来显示对应的pid!

    2)利用ps工具标识进程的5种状态码

D 不可中断 -->I/O阻塞的Sleeping--> ex >helloD-->终止影片的播放

R 运行    -->runnable 或者在队列中(quene)

S 中断    -->可以通过信号唤醒 sleeping

T 停止    -->ctrl-z在命令行的执行的命令-->暂时停止,画面还留在当前界面!

Z 僵死    -->zombie process -->进程关闭,占用的系统资源不释放

操作系统中进程状态的理解

  3)显示进程的指定信息排序

常用:ps -o  user,group,comm,pid,ppid,nice,%cpu,%mem

说明: o-->option;mem--->memory(内存);comm-->command(命令);nice(优先级)

进程排序(默认是正序排序)-->从小到大!

ps --sort=参数  -o 参数(默认是+表示正序)

ps --sort=-参数 -o 参数(倒序-->注意-的位置)!

需求:将进程中占用cpu最高(按从大到小顺序排列)的前5个用户pid和cpu以及命令信息保存到temp.txt文件中!

说明:Xorg所对应的是图形界面!

注意细节:默认第一行是说明信息

特殊:stat显示的信息

     ps -o stat 
############################
     l  --->内存中有锁定空间
     N  --->低优先级(相对于平均优先级)
S    <  --->高优先级(相对于平均优先级)
     +  --->前台运行(命令行开启火狐、vim、gedit等)
     s  --->顶级进程(祖宗)

    4)进程优先级的设置

方式1:renice -n   number pid    --->运行中的进程设置优先级(动态)!

方式2:nice   -n   number 程序命令 -->开启程序时指定优先级(静态)!

说明:优先级的范围是[-20,19],值越小优先级越高!

优先级:进程被内核先调度的机率!

####################################

三、bash下的工作管理

   管理方式

**************方式0************

ctrl-z      将占用终端的进程打入到后台"等待"(暂停)-->firefox和gedit具体的表现为铅色无法输入!

场景(vim 但是不知道文件放在哪里,需要到bash环境,将vim丢到后台中"等待"-->不需要结束)

**************方式1*************

bg number   将进程从前台调度到后台自行"运行"-->background-->注意:自行运行的条件

**************方式2*************

fg number   将进程(任务)从后台调度到前台"运行"-->foreground-->出现提示符让你操作的环境!

**************方式3**************

comm(任务) & 将进程打入到"后台运行",当前终端仍然可以进行其它工作,完成之后,显示完成的信息(Done)!

注意:放入后台的工作,如果想要运行,它必须不能与用户互动(不能等待terminal/shell的输入)!--->vim、gedit、就不能在后台执行!

放入后台执行的程序,无法ctrl+c停止!

说明1加一个'&'的目的:默认情况下,前台进程把Shell给占据了,我们无法进行其他操作,对于那些没有交互的进程,很多

时候,我们希望将其在后台启动,可以在启动参数的时候加一个'&'实现这个目的。

说明2:+号表示最近被放到后台(s、r)的工作号码--> -号表示第二个

问题:通过非终端的形式开启了一个firefox,通过终端又开启了一个firefox(可能在后台运行的吧),但是直接运行完了!

说明:在后台执行的任务,如果有信息输出也会显示在前台控制台上,为了避免与前台命令的输出信息混淆,重定向黑洞解决!

扩展场景:在单一的终端机下同时进行多个工作的管理行为!

/etc/security/limits.conf

####################################

四、进程信号

说明:通过向PID发送信号来控制进程的状态!

生活案例:男女抛媚眼的结果的讨论!女正在与朋友聊天!-->聊天发消息!

常用的进程信号等级(我们能操控)

1  --->进程重新加载(pid号不变)-->修改bug-->不能保证这段时间没人用(双11,争分夺秒)-->用户体验不到变化,不影响正常的上线!

2  --->删除进程在内存中的数据
演示1-->两个终端,一个终端输入内容没有结束(I/O没有关闭),另一个终端想发送信号2删除进程在内存中的数据!

3  --->删除鼠标在内存中的数据---> ctrl+\

9  --->强行结束单个进程(不能被阻塞)
演示3:既然你置之不理,--(中间先开了个火狐,然后打入后台-15来关闭了)--我只好用强了!!!

15 --->正常关闭进程(可能被阻塞)-->我不同意,我还有任务呢!
演示2--->此时接上,想正常关闭此终端,发送15信号,竟然置之不理

17 --->ctrl+z(暂停运行的进程)

18 --->运行暂停的进程--->fg/bg命令
饰演4:gedit --->ctrl-z --->通过ps查询此gedit的gid -->kill -18 pid

19 --->暂停某个进程(不能被阻塞)-->同 Ctrl + Z
饰演5:ps查询gedit的id --->kill -19 pid -->重新暂停

20 --->把进程打入到后台(可以被阻塞)-->次要的,不重要的打死!

理解思路:对比容易混淆的!

  1)信号2的演示

测试

2)信号9和15的演示

分析:分别发送9和15信号的区别?导致哪些严重的后果?

3)信号18、19、20的演示

    说明:18省略,主要讨论19和20的区别

   

相关链接

kill -9 pid 强制不能杀掉进程原因

Linux kill -9 和 kill -15 的区别

4)信号1的演示(核心思想)

(1)前提条件-->安装此服务

netstat -antlupe |grep http -->看端口

说明:开启时加载服务的配置文件

(2)观察服务开启和重启,对应的pid--> 看Main PID-->进程号来标识是否是同一进程!

修改配置文件:vim /etc/httpd/conf/httpd.conf

Listen:改成8080

(3)netstat -antlupe |grep http -->看服务的端口(没有发生变化)-->被有重新加载此配置文件

此时:重启服务--->观察Main pid 

netstat -antlupe |grep http -->端口发生变化-->加载了配置文件

重新修改配置文件:vim /etc/httpd/conf/httpd.conf把Listen改回去80

测试:netstat -antlupe |grep http -->端口没有发生变化

(4)重点来了,给此进程发送1的信号(偷偷的加载配置文件)

再netstat -antlupe |grep http -->端口发生变化-->此服务的端口改回为80

systemctl status httpd-->显示发送1信号前后pid没有发生变化

发送信号的工具

kill      -信号 进程id              -->向内核发送等级信号!
killall   -信号 进程的名字(批处理)   -->多个vim &,然后。。。
pkill     -u   指定用户 -信号       -->对用户进行批处理!

理解:后两个可以理解为通过过滤(某种条件)传递信号!

帮助文档

kill -l      #信号

man 7 signal #查看信号的详细信息!(注意7的含义)

五、top命令

1)ps和top的区别

ps--->选取一个时间点的进程状态!

top-->系统监控的命令-->动态查看进程运行的状态!

把握:(1)了解显示信息的含义;(2)交互命令的运用

参考:top命令详解、linux命令之top

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值