当前位置: 首页 > news >正文

linux进程与服务

进程基本概念

1.进程:进程是程序的基本组成单位

2.应用程序:应用程序是以进程作为基本单位进行

3.服务:其是一种特殊的应用程序

4.程序和进程的区别:程序的静态的,进程是程序运行的动态过程,相同的程序在不同的数据下进程就是不同的(比如游戏不同账号的内容不同,就是进程不同),进程还具有并发性和交往性,但程序是封闭的

5.进程和线程的区别:进程可以有多个线程,一个线程只能被一个进程拥有,线程不可单独执行,但每一个线程都有程序的入口,只有组成进程才能被执行

一、进程的组成

进程数据块

作用:操作系统管理进程的“灵魂”数据结构。存储进程的许哦有状态信息,是进程存在的唯一标志

1.基本标识:

进程ID(PID):唯一标识符,用于区分系统中所有进程

父进程ID(PPID):记录创建当前进程的父进程ID,形成树结构

2.运行状态:

记录进程当前状态(运行、就绪、阻塞)及状态转换所需条件(比如等待I/O完成)

3.资源信息:

CPU相关:当前CPU寄存器值,(程序寄存器PC、通用寄存器值等,用于中断后恢复执行)

内存管理:进程虚拟地址空间范围、页表指针(关联物理内存映射)

    • 文件描述符表:记录进程打开的文件、网络连接等资源句柄。

4.调度信息

    • 进程优先级、调度算法所需参数(如时间片剩余值)。

5.进程间通信(IPC)

    • 记录进程参与的共享内存、消息队列、信号量等 IPC 资源信息。

二、程序段(Text Segment)本质:进程执行的二进制代码(可执行文件的机器指令集合)

特点:

  • 只读性:通常为只读,防止程序运行中被意外修改(保证代码执行的稳定性)。
  • 可共享:多个进程可共享同一程序段(如多个终端同时运行同一个文本编辑器),节省内存空间。
  • 与地址空间关联:加载到进程虚拟地址空间的只读区域,通过 CPU 的指令指针(PC)按顺序执行。

三、数据段(Data Segment)作用:存储进程运行时的静态数据,即生命周期内持续存在的数据。

分类及内容:

  1. 初始化数据段(Initialized Data Segment)
    • 已初始化的全局变量:如int global_var = 10;,在程序加载时由操作系统分配固定内存并赋值。
    • 静态变量:函数内声明的static变量(如static int count = 0;),生命周期与进程一致。
  1. 未初始化数据段(BSS Segment)
    • 未初始化的全局 / 静态变量:如int uninitialized_var;,程序加载时由系统自动初始化为 0 或空指针。与程序段的区别:数据段可读写,且不同进程实例(如同一程序的多个运行副本)拥有独立的数据段,互不干扰。

四、堆栈段(Stack and Heap Segment)

1. 栈(Stack)功能:管理进程运行时的局部数据,遵循 ** 后进先出(LIFO)** 原则。

存储内容:

  • 函数调用信息:
    • 局部变量(非静态):如函数内声明的int a = 5;。
    • 函数参数:传递给被调用函数的输入值。
    • 返回地址:记录函数调用结束后应返回的下一条指令位置。
  • 栈帧(Stack Frame):每个函数调用对应一个栈帧,包含上述信息,函数执行结束后栈帧自动销毁(内存释放由系统自动管理)。特点:
  • 自动管理:内存分配和释放由编译器和操作系统自动完成,无需程序员干预。
  • 大小固定:通常有固定上限(如 Linux 默认栈大小约 8MB),递归过深易引发 “栈溢出” 错误。

2. 堆(Heap)功能:

动态分配内存的区域,用于程序运行时申请不确定大小的内存块(如通过

malloc/

new创建对象)。

特点:

  • 手动管理:程序员需显式申请(malloc/new)和释放(free/delete)内存,若未释放会导致内存泄漏。
  • 空间灵活:理论上可扩展至进程虚拟地址空间的上限(受限于系统内存和进程权限)。
  • 非连续分配:内存块在堆中不要求连续,通过链表或索引结构管理空闲块。

五、进程组成的逻辑关系

进程创建

进程由父进程创建,创建子进程的函数有很多,fork、exec、clone等,fork最常见

由父进程执行fork函数,新建的进程为子进程,PID为进程ID,PPID为父进程ID

0号进程

0号进程是linux系统首先启动的进程,由于其task_struct的comm字段为swapper,所以也称为swapper进程。当系统所有进程起来时,0号进程就蜕化为idle进程 ,当cpu无进程可执行就会执行idle,所以查看cpu进程时,idle%作为CPU空闲状态占比

1号进程

又称为init进程,Systemd是使用最多的init进程,它作为1号进程在操作系统中管理用户的进程,垃圾回收等动作

2号进程

由0号进程创建,是所有内核进程的父进程

Daemon后台运行进程也称为守护进程,守护进程就是父进程创建完子进程后,在子进程未退出前就直接退出,子进程成为孤儿进程,被init进程接管

linux系统启动过程

1.打开电源

2.从非易失性内存加载,执行加电自检(post),检测硬件基础啊状态

3.检测设备:识别硬盘、主板等硬件、为启动做准备

4.选择启动设备:从硬盘、光驱等选择

5.读取/etc/grup2.cfg文件,加载内核与依赖库,引导系统

6.启动systemd,用户首个进程,负责初始化和服务管理

7.通过default.target、multi-user.target (多用户模式),定义启动状态和服务集合

8.执行/systemd-logind(用户登陆管理)、etc/profile(系统环境配置)、~/.bashrc(用户Shell配置)等脚本

9.启动完成,可以登录

进程状态机

进程一般有三个状态运行、就绪、阻塞

1.运行态:进程具有运行条件,且正在使用CPU

2.就绪态:进程具有运行条件,等待系统分配cpu就可运行

3.阻塞态:进程缺乏某种运行条件,就算有空闲的CPU,进程也不能运行(cpu资源已释放)

注意:三种状态中,运行态和就绪态可以相互转换,运行态和阻塞态、阻塞态和就绪态只能单向转换。

R:正在运行或者正在就绪队列

S:可中断阻塞状态,除等待资源到位还可以被其他进行的信号唤醒

D:不可中断阻塞状态,只能被等待的资源唤醒,一般由于进程依赖I/O读写事件,但其发生异常(一般为硬盘),所以此时应该检测你的硬盘状态

Z:僵尸状态,进程结束但未消亡的一种状态,占用进程表项和pid,不占用cpu资源

T:进程已被停止,通常是由于用户或其他进程发出的信号,可通过另一信号返回运行态

T:正在调试的进程也显示为T暂停

N:低优先级进程

+:前台进程组进程

l:多线程进程

s:会话进程首进程 包含子进程

僵尸进程

进程调用exit函数后结束进程,但未真正销毁,形成一个僵尸进程的数据结构。其不占用cpu资源,但占用进程表项和pid,不可被执行,调度

查看僵尸进程

ps aux | grep python

显示Z的进程即为僵尸进程

top

其输出的第二行的最后一个zombie即为僵尸进程数

僵尸进程危害

占用进程表项、pid

由于linux系统中pid有限,当僵尸进程太多则会是系统无法产生新的进程由于pid被耗尽(类似于前面我们提到的inode编号,系统提示没有空间创建文件时,可能时block用尽,及磁盘空间用尽,还有一种可能就时inode编号耗尽)

处理僵尸进程

1.杀死父进程,让父进程带走僵尸进程

2.若父进程无法带走,就用kill -HUP 将其挂起。使其不在占用资源

孤儿进程

指父进程结束子进程还在进行,其子进程就被称为孤儿进程,但其会被init进程接管,调用wait()或者waidpid()回收孤儿进程,所以孤儿进程并不是一个问题

进程信息查看和管理

ps 列出当前的进程以及详细信息

用户识别符(uid)

进程识别符(pid)

cpu已经运行时间

进程在各个位置内存的分配

进程的位置

当前进程状态

常用参数

petree查询进程树

可将所有进程以树状图输出

pidof查询pid

pidof 进程名

可输出相关进程的pid

pgrep查询pid

pgrep 进程名

逐行输出pid

losf查看打开的套接字

losf访问核心文件所以只有root用户运行才能实现其完整功能

top进程实时信息监控

top

常用参数

-d 秒数 指定几秒更新

-n 次数 指定更新几次结束

-b 使用批处理模式,将命令重定向到文件中

-p 指定pid 只看某个进程的信息

-s 在安全模式下执行,避免在交互模式中出现错误

-u 指定uid 只监听某用户的进程

?/h 提供帮助

P: 以cpu使用率排序

M:以内存使用率排序

N:以PID排序

T:以cpu累计运行时间排序,time+

k:用于给进程信号,一般用于杀死进程 k pid (-9/15) 终止进程

r:按照PID给某个进程重新设置优先级

q:退出top

下面是top输出相关信息详解

free查看内存使用

vmstat 查询内存磁盘cpu

vmstat 2 5 (每2秒刷新一次,5次后退出)

常用参数

-s (显示内存)

-d (查看磁盘)

ps进程内存占用查询

ps auxk -%mem (根据MEM的使用率进行倒序排序)

vsz:虚拟内存,包括代码、数据、共享库等,所以通常比进程正在使用的物理内存大的多

RSS:较为精确的进程内存使用,仅计算RAM(随机存储器)中的内存

fg与bg

fg将后台工作恢复到前台运行

fg %工作号

bg让后台暂停的进程继续运作

bg %工作号

(注意工作号不是pid)

systemd

linux系统中,内核初始化后首先执行init(sysvinit、uostart、systemd),所有进程都由init直接或间接进行创建并运行,init以守护进程的身份存在,负责组织与运行相关初始化相关工作,让系统进入定义好的运行模式

systemd是进程服务总称,其控制管理系统的资源,systemd-login负责用户登录的信息创建、删除、修改等等

进程调度

解决问题

1.调度时机 进程正常终止、新进程创建、进程由运行变阻塞、由运行变就绪态

2.调度过程 加载新地址空间、切换内核栈和硬件上下文

3.调度算法

进程优先级

数字越小优先级越高

0-99 :实时优先级,内核调整

100-139:静态优先级、用户可控制

优先级越高,获得cpu运行机会更多、运行时间更多

系统进程停止命令

kill all(指定名称杀死进程)

yum install psmisc -y

killall -参数 进程名

pkill与kill 基本相同,用进程名杀死进程

不加参数则杀死所有有关进程名的进程

http://www.dtcms.com/a/435319.html

相关文章:

  • wordpress订阅会员seo建站技术
  • 医疗AI平台化转型:从单点试点到体系化建设的互操作性与质量控制路径研究(下)
  • JavaScript 数组清空的三种方式
  • 网站云空间和普通空间上海传媒公司官网
  • 网站标题正确书写标准微信公众号登录不上
  • 复制标签页导致的Vue动态路由失效问题解决思路
  • 从零起步学习Redis || 第六章:Redis单线程模式的实现详解
  • 影视公司网站设计河南省建设厅厅长
  • PySide6 新(建)窗口 简单示例
  • 逍遥WEBP图片转换组件XiaoyaoWebp.dll
  • 网站建设公司+长春建设部质监局网站
  • Oracle的connect by level在MySQL中的华丽变身
  • wordpress 便签四川旅游seo整站优化站优化
  • K8s基础原理
  • 学习Java第二十八天——黑马点评26~32
  • QML学习笔记(二十三)QML的MouseArea的drag
  • 数据驱动下的GBDT实战指南:从原理拆解到业务落地的方法论
  • 欧拉-马歇罗尼常数
  • 一款基于STM32F103和树莓派的无人车
  • ORB_SLAM2原理及代码解析:MapPoint::UpdateNormalAndDepth() 函数
  • 4-2. 二叉搜索树 (BST)
  • 做英文网站的标准字体鱼巴士设计师服务平台
  • 做网站流量是什么珠海网站建设优化
  • NTLite(操作系统定制工具)
  • 模块即服务?厘清 Linux 系统服务与微服务架构的本质区别
  • 成都电商网站开发免费送的广告怎么在网站上做
  • 熊猫网站ppt外贸网建站
  • 设计模式第六章(观察者模式)
  • C4D R20新增功能平滑滤镜和调整外形滤镜深度解析
  • 数据安全风险评估