简要剖析Linux系统的进程管理机制

Linux系统的进程管理机制主要包括以下几个方面:

1. **进程控制块(Process Control Block, PCB)**:每个进程都有一个对应的PCB,其中包含了进程的状态信息、资源分配情况等。PCB是操作系统管理进程的基础。

2. **进程状态转换**:Linux系统中,进程可以处于就绪态、运行态、阻塞态等不同状态。状态之间的转换由操作系统根据调度算法和事件触发来完成。

3. **调度算法**:Linux内核提供了多种调度算法,如先来先服务(FCFS)、时间片轮转(Round Robin)和优先级调度等。这些算法决定了CPU时间的分配方式。

4. **内存管理**:Linux使用虚拟内存技术,为每个进程分配独立的地址空间。通过页表实现地址映射,保证了多任务环境下的内存安全和隔离性。

5. **信号处理**:Linux支持信号机制,允许进程接收外部事件的通知,并据此调整自己的行为。信号处理机制增强了系统的灵活性和可靠性。

6. **线程管理**:现代Linux系统支持多线程技术,允许一个进程中包含多个轻量级的线程。这些线程共享同一段代码和数据段,但拥有独立的栈空间。

7. **资源限制**:为了防止恶意程序或资源占用过多导致系统不稳定,Linux对每个进程可使用的资源(如文件描述符数量、最大打开文件数等)进行了限制。

通过上述机制,Linux能够有效地管理和调度系统中的各个进程,确保系统的高效运行和资源的有效利用。


一 、进程的概念和分类
1.进程的概念
Linux是一个多用户多任务的操作系统。
多用户是指多个用户可以在同一时间使用同一个linux系统;
多任务是指在Linux下可以同时执行多个任务,更详细的说,linux采用了分时管理的方法,所有的任务都放在一个队列中,操作系统根据每个任务的优先级为每个任务分配合适的时间片,每个时间片很短,用户根本感觉不到是多个任务在运行,从而使所有的任务共同分享系统资源,这就是多任务的概念。
上面说的是单CPU多任务操作系统的情形,在这种环境下,虽然系统可以运行多个任务,但是在某一个时间点,CPU只能执行一个进程,而在多CPU多任务的操作系统下,由于有多个CPU,所以在某个时间点上,可以有多个进程同时运行。
进程的的基本定义是:在自身的虚拟地址空间运行的一个独立的程序,从操作系统的角度来看,所有在系统上运行的东西,都可以称为一个进程。
需要注意的是:程序和进程的关系可以是多对多关系!
    
2.进程的分类
按照进程的功能和运行的程序分类,进程可划分为两大类:
l) 系统进程:可以执行内存资源分配和进程切换等管理工作;而且,该进程的运行不受用户的干预,即使是root用户也不能干预系统进程的运行。
2) 用户进程:通过执行用户程序、应用程序或内核之外的系统程序而产生的进程,此类进程可以在用户的控制下运行或关闭。
针对用户进程,又可以分为交互进程、批处理进程和守护进程三类。
3) 交互进程:由一个shell终端启动的进程,在执行过程中,需要与用户进行交互操作,可以运行于前台,也可以运行在后台。
4) 批处理进程:该进程是一个进程集合,负责按顺序启动其他的进程。
5) 守护进程:守护进程是一直运行的一种进程,经常在linux系统启动时启动,在系统关闭时终止。它们独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。例如httpd进程,一直处于运行状态,等待用户的访问。还有经常用的crond进程,这个进程类似与windows的计划任务,可以周期性的执行用户设定的某些任务。
3.进程的属性
(1)进程的几种状态


(2)进程之间的关系
在linux系统中,进程ID(用PID表示)是区分不同进程的唯一标识,它们的大小是有限制的,最大ID为32768,用UID和GID分别表示启动这个进程的用户和用户组。所有的进程都是PID为1的init进程的后代,内核在系统启动的最后阶段启动init进程,因而,这个进程是linux下所有进程的父进程,用PPID表示父进程。所以如果init进程被kill,则意味着所有进程就kill,那系统会重启或关闭


举例:ps命令输出的httpd进程信息:


相对于父进程,就存在子进程,一般每个进程都必须有一个父进程,父进程与子进程之间是管理与被管理的关系,当父进程停止时,子进程也随之消失,但是子进程关闭,父进程不一定终止。
如果父进程在子进程退出之前就退出,那么所有子进程就变成的一个孤儿进程,如果没有相应的处理机制的话,这些孤儿进程就会一直处于僵死状态,资源无法释放,此时系统默认将init进程作为它们的父进程。


    二、 进程管理命令
    Linux下,监控和管理进程的命令有很多,下面我们以ps、top、pstree、lsof四个最常用的指令介绍如果有效的监控和管理linux下的各种进程。
    (1)利用ps命令监控系统进程
ps是linux下最常用的进程监控命令,重点讲述如何利用ps指令监控和管理系统进程。
举例:
下面是apache进程的输出信息


其中,UID是用户的ID标识号,PID是进程的标识号,PPID表示父进程,STIME表示进程的启动时间,TTY表示进程所属的终端控制台,TIME表示进程启动后累计使用的CPU总时间,CMD表示正在执行的命令。并且root的PPID为1,即为Init的ID.
   
   另一种指令方式查看子进程与父进程的对应关系:


其中,%CPU表示进程占用的CPU百分比,%MEM表示进程占用内存的百分比,VSZ表示进程虚拟大小,RSS表示进程的实际内存(驻留集)大小(单位是页)。
    STAT表示进程的状态,进程的状态有很多种:用“R”表示正在运行中的进程,用“S”表示处于休眠状态的进程,用“Z”表示僵死进程,用“<”表示优先级高的进程,用“N”表示优先级较低的进程,用“s”表示父进程,用“+”表示位于后台的进程。START表示启动进程的时间。
    这个例子将进程之间的关系用树形结构形象的表示出来,可以很清楚的看到,第一个进程为父进程,而其它进程均为子进程。同时从这个输出还可以看到每个进程占用CPU、内存的百分比,还有进程所处的状态等等。
   (2)利用pstree监控系统进程
pstree命令以树形结构显示程序和进程之间的关系,使用格式如下:




代码如下:


pstree [-acnpu] [<PID>/<user>]

具体选项内容可用pstree --help来查看,由于显示结果的树形结构太长,就不再贴图.      
pstree清楚的显示了程序和进程之间的关系,如果不指定进程的PID号,或者不指定用户名称,则将以init进程为根进程,显示系统的所有程序和进程信息,若指定用户或PID,则将以用户或PID为根进程,显示用户或PID对应的所有程序和进程。
    (3)利用top监控系统进程
     top命令是监控系统进程必不可少的工具,与ps命令相比,top命令动态、实时的显示进程状态,而ps只能显示进程某一时刻的信息,同时,top命令提供了一个交互界面,用户可以根据需要,人性化的定制自己的输出,更清楚的了解进程的实时状态。
    下面是top的显示信息


通过动态信息可以看出一个进程从上次更新到现在占用cpu时间,占用物理内存(%MEM),从进程启动到现在占用cpu总时间(TIME+)等。通过了解这些信息,可以使系统管理员掌握每个进程对系统CPU、物理内存的使用状况。

   (4)利用lsof监控系统进程与程序
lsof全名list opened files,也就是列举系统中已经被打开的文件,通过lsof,我们就可以根据文件找到对应的进程信息,也可以根据进程信息找到进程打开的文件。
lsof指令功能强大,这里介绍“-c,-g,-p,-i”这四个最常用参数的使用。更详细的介绍请参看manlsof或者lsof --help。
1) lsoffilename:显示使用filename文件的进程。
2)lsof -c abc:显示abc进程现在打开的文件
3)lsof -g gid:显示指定的进程组打开的文件情况,使用进程组ID即GID
4)lsof -p PID:PID是进程号,通过进程号显示程序打开的所有文件及相关进程,例如,想知道init进程打开了哪些文件的话,可以执行“lsof-p 1”命令
5)lsof-i :通过监听指定的协议、端口、主机等信息,显示符合条件的进程信息。
例如:
显示系统中tcp协议对应的25端口进程信息:




代码如下:


[root@localhost ~]# lsof-i tcp:25

显示系统中80端口对应的进程信息:




代码如下:


[root@localhost ~]# lsof-i :80

(5) 计划任务
计划任务就是提前设定的一系列命名,来在特定时间里自动完成,比如一些自动备份,自动关系,自动发邮件,广播之类
计划任务有三个比较重要的命令
1)at安排作业在某一时刻执行一次
2)Batch安排作业在系统负载不重时执行一次
3)Cron安排周期性运行的作业
(6)结束进程
Kill -1重启进程
kill 进程号   结束进程
kill -9强制结束进程
(7) 设置程序的优先级
Niec :指定程序运行优先级别




代码如下:


Nice -n command

Renice:改变一个正在运行的进程的优先级别




代码如下:


Renice -n pid

优先级取值范围为(-20,19)
(8)进程的挂起和恢复:
挂起:Ctrl+Z
终止:Ctrl+C
进程的恢复:
恢复到前台继续运行:fg
恢复到后台继续运行:bg
查看被挂起的进程:jobs








相关推荐

  • 如何深度清理C盘(深度清理c盘垃圾怎么清理)

    如何深度清理C盘(深度清理c盘垃圾怎么清理) 不想让C盘爆满电脑卡爆?来,让我们跟着春天的脚步一起来探索C盘的秘密C盘空间被大量占用,电脑运行的速度将会不断变慢,然后慢慢卡爆,所以拯救C盘,刻不容缓!!现在就教你小妙招,拒绝C盘爆满,让你的电脑快到飞起!!不管是清理瘦身还是扩容,一定要注意提前备份!!提前备份!!提前备份!!以Win10系统为例:1.点击电脑左下角的"开始",然后点击"运行",在空格中输入"cleanmgr.exe"后点击"确定".2.选择一个你 ... ...

  • 新手怎么做自媒体拍视频(如何拍摄自媒体短视频)

    新手怎么做自媒体拍视频(如何拍摄自媒体短视频) 通过近段时间学习,我浏览了大量教程和功能介绍之类,在此特别说明一下做自媒体视频的一些简单问题,如果你也有这方面的需求,那么让我们一起加油努力学习吧!第一是关于所需要的软件问题:一定是今日头条APP的普通版,记住不是极速版.西瓜视频 APP,剪映剪辑小软件.第二是如何申请账号:新手用户下载完以上介绍的软件后,要用自己的身份证和手机号进行实名注册,并在实名认证通过后,开通创作权益,个人体验来看,一般需要百粉之后才能有微薄收益.第三是要记得开通原创权益:拍视频和文章都可以开通原创权益.特别需要注意的是 ...

  • CentOS如何查看进程运行的完整路径?

    CentOS如何查看进程运行的完整路径? CentOS如何查看进程运行的完整路径? Linux在启动一个进程时,系统会在/proc下创建一个以PID命名的文件夹,在该文件夹下会有我们的进程的信息,其中包括一个名为exe的文件即记录了绝对路径,通过ll或ls –l命令即可查看. ll /proc/PID cwd符号链接的是进程运行目录; exe符号连接就是执行程序的绝对路径; cmdline就是程序运行时输入的命令行命令; environ记录了进程运行时的环境变量; fd目录下是进程打开或使用的文件的符号连接. ...

  • 手机莫名其妙扣费怎么回事(手机不明原因扣费是怎么回事)

    手机莫名其妙扣费怎么回事(手机不明原因扣费是怎么回事) 打开支付宝[我]-[设置]-[支付设置]-[免密支付/自动扣款],在下方可以直接查看自动扣款的服务,不需要的可以直接点击[解约].打开微信[我]-[钱包],点击右上角再点击[支付管理]-[自动扣费],即可查看目前自动扣款的项目.在手机中有些是方便我们操作,确被有些别有用心的人和下载的吸费软件,沦为赚钱的工具极大的损害消费者的权益和用户体验,我们只能提高警惕,避免不必要的损失,希望有关部门严厉打击.如果你网上买手机,验货时间第一步检查外包装是否完整,第二步开机的时候是不是第一次开机,如果有人开过机 ...

  • “三屏异显”办公模式怎么设置

    “三屏异显”办公模式怎么设置 数字办公盛行的当下,海量数据"堆积如山","单屏显示"所承载的信息量有限,特别影响职场白领们的办公效率.此情景下,"多屏异显"这种能够承载庞大信息量的豪横办公模式走近大众的视野,并迅速脱颖而出,深受市场认可与用户青睐.特别是对于金融行业的用户来说,多屏幕分区监控股市数据,更有利于洞察股市先机,掌握全局信息.那么,"多屏异显"到底是如何做到的呢?接下来,小优就和大家演示一下1台笔记本电脑连接2个显示屏实现"三 ... ...

  • Linux系统中使用nmcli查看网络配置方法

    Linux系统中使用nmcli查看网络配置方法 相信很多小伙伴都有在使用Linux系统,那么在其中我们怎么通过使用nmcli命令来查看网络配置呢?方法很简单,下面小编就来为大家介绍.具体如下:1. 首先,在电脑上将Linux系统打开,进入该系统的终端窗口.2. 使用nmcli命令"nmcli con show",就能将所有连接显示.3. 使用nmcli命令"nmcli con show "System eth0",就能将活动的所有配置设置显示.4. 使用nmcli命令"nmcli d ... ...