首页 > 系统相关 >进程管理

进程管理

时间:2024-11-22 21:12:07浏览次数:1  
标签:负载 优先级 僵尸 管理 内存 进程 CPU

进程管理

同步和异步

同步(Synchronous)

  1. 定义
    • 在同步操作中,任务执行的顺序是固定的,后一个任务必须等待前一个任务完成后才能开始。
  2. 特点
    • 阻塞:在同步操作中,调用者会被阻塞,直到操作完成。这意味着程序会在当前任务上停留,无法执行其他任务。
    • 易于理解:因为执行顺序是线性的,容易跟踪和调试。

异步(Asynchronous)

  1. 定义

    • 在异步操作中,任务的执行不依赖于其他任务的完成,调用者可以在发起请求后继续执行其他操作。
  2. 特点

    • 非阻塞:调用者不会被阻塞,可以继续执行其他代码。通常会使用回调函数或事件机制来处理结果。
    • 更高的效率:可以在等待 I/O 操作(如网络请求或文件读取)时执行其他计算任务,提高资源利用率。
    
    

ps

[root@localhost ~]# ps aux|more
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
USER:拥有该进程的用户。
PID:进程 ID。
%CPU:CPU 使用百分比。
%MEM:内存使用百分比。
VSZ:虚拟内存大小。
RSS:常驻内存集大小(实际使用的内存)。
TTY:与进程关联的终端。
STAT:进程状态。
START:进程开始时间。
TIME:总 CPU 时间使用量。
COMMAND:启动该进程的命令
ps aux --sort=-%mem|more 按照内存排序
ps aux --sort=-%cpu|more 按照cpu排序

pmap

用于显示进程的内存映射情况。它可以提供指定进程的虚拟内存使用情况,包括各个内存段的地址、大小、权限等信息。

pmap <PID>

top

top - 07:04:59 up  8:04,  2 users,  load average: 0.00, 0.00, 0.00
Tasks: 220 total,   1 running, 219 sleeping,   0 stopped,   0 zombie
%Cpu(s):  3.0 us,  3.0 sy,  0.0 ni, 93.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   3710.0 total,   2610.7 free,    607.3 used,    491.9 buff/cache
MiB Swap:   4032.0 total,   4032.0 free,      0.0 used.   2868.0 avail Mem 

PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND       

系统摘要信息

  • 07:04:59:当前时间。
  • up 8:04:系统已经运行了 8 小时 4 分钟。
  • 2 users:当前有 2 个用户登录。
  • load average: 0.00, 0.00, 0.00:系统的负载平均值,分别是最近 1 分钟、5 分钟和 15 分钟的负载。0.00 表示系统负载非常低。

任务信息

  • Tasks: 220 total:总共有 220 个进程。
  • 1 running:当前有 1 个进程正在运行。
  • 219 sleeping:有 219 个进程处于休眠状态。
  • 0 stopped:没有停止的进程。
  • 0 zombie:没有僵尸进程。

CPU 使用情况

  • %Cpu(s)

    :CPU 使用的详细信息:

    • 3.0 us:用户进程占用的 CPU 百分比(用户空间)

      表示用户空间(user space)进程占用的 CPU 百分比。这些进程是由用户启动的,不涉及内核的直接管理。高用户空间 CPU 使用率通常表明用户应用程序正在积极运行。
      
    • 3.0 sy:系统进程占用的 CPU 百分比(内核空间)。

      表示内核空间(system space)进程占用的 CPU 百分比。内核进程是操作系统核心组件,负责管理系统资源(如文件系统、进程管理等)。较高的系统 CPU 使用率可能表示系统正处理大量的 I/O 操作或其他内核级任务。
      
    • 0.0 ni:用户进程以非负优先级运行占用的 CPU 百分比。

      表示以非负优先级(nice value 大于或等于 0)运行的用户进程占用的 CPU 百分比。`nice` 值是用来调整进程的优先级,较高的 `nice` 值意味着较低的优先级。此值为 0 表示没有进程在以非负优先级运行。
      
    • 93.9 id:空闲的 CPU 百分比。

    • 0.0 wa:等待 I/O 的 CPU 百分比。

      表示等待 I/O 操作的 CPU 百分比。这个值表明 CPU 有多少时间在等待 I/O 操作(如磁盘读写)完成。较高的 I/O 等待时间可能表示磁盘或网络 I/O 是瓶颈。
      
    • 0.0 hi0.0 si0.0 st:分别表示硬件中断、软件中断和虚拟机偷取的 CPU 百分比。

      1.硬件中断是来自硬件设备(如键盘、鼠标、网络等)的信号,CPU 需要暂时停止当前的任务去处理这些信号。
      
      当你按下键盘上的某个键时,键盘硬件会生成一个中断信号,通知 CPU 有新的输入
      CPU 接收到这个中断信号后,会暂停当前正在执行的任务,保存其状态,然后转到键盘中断处理程序(Interrupt Service Routine, ISR)。
      处理程序会读取按下的键的代码(通常称为扫描码),并将其传递给操作系统。
      处理完成后,CPU 会恢复之前的任务,继续执行。
      
      2.软件中断通常由操作系统内部产生,用于处理特定的任务或请求。
      
      程序调用 read():
      假设一个程序需要从文件中读取数据,它会执行类似于 bytes_read = read(file_descriptor, buffer, size); 的代码。这行代码实际上请求操作系统来执行读取操作。
      生成软件中断:
      当程序执行到这条指令时,它会触发一个软件中断(通常是通过特定的指令,如 int 0x80 在旧的 Linux 系统中,或使用系统调用的库函数在现代系统中)。
      操作系统接收到软件中断后,会暂停当前程序的执行,并保存其上下文(例如寄存器状态)。
      操作系统的内核会找到与 read() 系统调用相对应的处理程序。这通常是一个内核级的函数,负责处理文件读取请求。
      内核中的 read() 处理程序会执行实际的读取操作。这可能涉及从磁盘或其他存储设备获取数据。
      数据被读取到指定的缓冲区中。
      读取完成后,内核会把读取到的字节数返回给用户程序。
      随后,内核会恢复用户程序的执行状态,将控制权返回给它,程序可以继续执行接下来的代码。
      
      3.在虚拟化环境中,主机的虚拟机可能会“偷取”某些 CPU 资源。如果这个值很高,可能表示主机资源不足,影响了虚拟机的性能。
      
      

内存使用情况

  • MiB Mem:内存的详细信息:
    • 3710.0 total:总内存为 3710 MB。
    • 2610.7 free:当前可用内存为 2610.7 MB。
    • 607.3 used:已使用内存为 607.3 MB。
    • 491.9 buff/cache:用于缓冲区和缓存的内存。
  • MiB Swap:交换空间的详细信息:
    • 4032.0 total:总交换空间为 4032 MB。
    • 4032.0 free:当前可用的交换空间为 4032 MB(表示没有使用交换空间)。
    • 0.0 used:已使用的交换空间为 0 MB。
    • 2868.0 avail Mem:可用内存(包括缓冲区和缓存的内存)为 2868 MB。

进程信息

  • PID:进程 ID。
  • USER:拥有该进程的用户。
  • PR:进程优先级。
  • NI:进程的 nice 值。
  • VIRT:进程使用的虚拟内存。
  • RES:进程使用的常驻内存。
  • SHR:进程共享的内存。
  • S:进程状态(例如 R 表示运行中,S 表示睡眠)。
  • %CPU:进程使用的 CPU 百分比。
  • %MEM:进程使用的内存百分比。
  • TIME+:进程使用的总 CPU 时间。
  • COMMAND:启动进程的命令。

load average

负载值的定义

  • 在 Linux 系统中,负载值表示在特定时间段内,正在运行或等待运行的进程的数量。它不仅包括正在使用 CPU 的进程,还包括那些等待 CPU 资源的进程。

负载值的取值范围

  • 负载值是一个非负数,理论上没有上限,但负载过高通常会导致系统性能下降。

负载值的具体解释

  • 小于 1
    • 说明系统负载轻,CPU 资源充足。此时,平均每个 CPU 核心都有足够的时间来处理其任务。例如,在一个单核心系统中,负载为 0.5 表示 CPU 只有一半的时间被占用,还有一半的时间是空闲的。
  • 等于 1
    • 系统负载达到了其能力的边界。每个运行的进程都能在适当的时间内获得 CPU 资源,但没有冗余的处理能力。此时,用户可能会感受到性能的波动。
  • 大于 1(以单核 CPU 为例)
    • 如果负载大于 1,表示有多个进程在争夺 CPU 资源。例如,负载为 2 表示有两个进程在等待 CPU 资源,这可能会导致某些进程的响应时间增加。
    • 举例:在单核系统中,负载为 2 意味着系统正在处理的任务数量是 CPU 能够处理的两倍,因此会有一部分任务在等待,这可能导致系统变慢。
  • 多核 CPU 的影响
    • 在多核系统中,负载值需要结合 CPU 核心数量进行评估。例如,在一个 4 核 CPU 系统中:
      • 负载值为 4 表示系统处于满负荷状态,但 CPU 仍然可以处理所有任务。
      • 负载值为 5 表示有一个任务在等待,可能会影响性能。
      • 负载值为 8 则表示有很多进程在等待 CPU 资源,系统可能变得非常缓慢。

瞬时高负载:短时间内的高负载(如 10-15 秒)可能是正常的,尤其是在进行大量计算或I/O操作时,但如果持续存在,应该考虑进行性能优化或资源扩展。

僵尸进程

(Zombie Process)是指已经完成执行但仍然存在于进程表中的进程。它的状态是“僵尸”,因为它的父进程尚未读取它的退出状态信息

僵尸进程的形成

  1. 进程生命周期

    • 当一个进程执行完毕后,它会发送一个退出状态给其父进程。这一状态包含了进程的执行结果和资源使用情况。
    • 此时,进程不会立即从进程表中删除,而是变为僵尸状态,等待父进程使用 wait()waitpid() 函数读取退出状态。

    父进程未处理

    • 如果父进程没有在子进程结束后调用 wait(),那么子进程会保持在僵尸状态,继续占用一个进程表项。

僵尸进程的特征

  • 状态:僵尸进程的状态一般会显示为 Z,表示它是一个僵尸状态。
  • 资源占用:僵尸进程不占用 CPU 资源,因为它已经完成了执行,但仍然占用一个进程表项。
  • 父进程:僵尸进程依赖于其父进程来清理。如果父进程终止而没有收集子进程的信息,这些僵尸进程会被 init(进程 ID 为 1 的进程)收养,init 会定期清理这些僵尸进程。

僵尸进程的影响

  • 进程表占用:尽管僵尸进程不消耗 CPU 资源,但它们仍然占用进程表中的条目。系统的进程表有大小限制,如果有过多的僵尸进程,可能导致无法创建新进程。
  • 系统稳定性:在某些情况下,僵尸进程可能会表明程序设计上的缺陷,导致系统不稳定

解决方法

  • 终止父进程:如果僵尸进程的父进程存在,可以通过重启或修复父进程的代码,使其调用 wait(),从而清理僵尸进程。
  • 杀死父进程:如果父进程无法处理,可以杀死父进程,此时系统会将僵尸进程交给 init 进程,后者会清理它们。

dd if

dd if=<输入文件> of=<输出文件> [其他选项]
bs=<字节数>:设置块大小,指定每次读取和写入的字节数。
count=<块数>:指定要复制的块的数量。

复制文件

将文件 input.txt 复制到 output.txt

dd if=input.txt of=output.txt

创建一个空文件

创建一个大小为 1MB 的空文件:

dd if=/dev/zero of=empty_file bs=1M count=1

从磁盘创建镜像

将整个磁盘 /dev/sda 备份到镜像文件 disk.img

dd if=/dev/sda of=disk.img bs=4M

恢复磁盘镜像

将之前创建的镜像 disk.img 恢复到磁盘 /dev/sda

dd if=disk.img of=/dev/sda bs=4M

显示进度

在复制过程中显示进度信息:

dd if=input.txt of=output.txt status=progress

信号管理机制

pid

查找程序的 PID

pidof bash

查找所有与 python 相关的进程:

pidof -c python

使用 ps 命令结合 -u 选项可以查看特定用户的进程。

ps -u <用户名>

使用 pgrep-G 选项可以根据组名查找进程:

pgrep -G <组名>

kill

kill 是一个用于发送信号给进程的命令行工具,常用于终止或管理正在运行的进程。尽管名称是 "kill",它不仅可以用来结束进程,还可以用于其他目的,例如暂停进程、继续运行等。

kill [选项] <进程ID>

-s <信号> 或 --signal <信号>:指定要发送的信号。默认情况下,kill 发送 SIGTERM(信号 15)。
-l:列出所有可用的信号及其名称。
-n <信号编号>:根据信号编号发送信号。例如,kill -n 9 <PID> 发送 SIGKILL 信号。
-p:只打印进程的 PID,而不发送信号。
信号名 信号编号 描述
SIGTERM 15 请求终止进程(默认信号)。
SIGKILL 9 强制终止进程,无法被捕获或忽略。
SIGINT 2 中断进程,通常是 Ctrl+C 发送给前台进程。
SIGSTOP 19 暂停进程,无法被捕获或忽略。
SIGCONT 18 继续一个被暂停的进程。
SIGHUP 1 通常用于通知进程其控制终端已关闭。

kill 命令通常需要 PID。如果要通过进程名杀死进程,可以结合 pkill 命令:

pkill process_name

进程优先级

[root@localhost ~]# ps -axo comm,user,nice|more
查看进程优先级

改变进程优先级

用户创建进程优先级都为0
系统进程优先级都为-20
数字越小优先级越高
renice 10 pid  将已经运行的进程优先级改为10
nice -n -15 vim /tmp/passwd 将进程优先级设置为-15(未运行)

job任务控制

/test.sh & 将一个进程放入后台运行
ctrl +z 将前台任务暂停
fg %任务号 将后台进程恢复到前台
bg %任务号 用于将一个已停止的进程(通常是前台进程)放到后台继续运行。

一个例子

调整优先级

  1. 设置该程序md5sum /dev/zero优先级为-10,让其运行
  2. 执行sha1sum /dev/zerotop & 放入后台运行,调整该程序优先级为-20
  3. 查看这两个程序运行的情况
  4. 结束这两个程序
(nice -n -10 md5sum /dev/zero & sha1sum /dev/zero & sleep 1; renice -n -20 $(pgrep -f sha1sum))

nice -n -10 md5sum /dev/zero & sha1sum /dev/zero & #这两条命令之间不用加分号或者&&可以同时执行

ps aux | grep -E 'md5sum|sha1sum'|grep -v grep |awk '{print $2}'|xargs kill #结束这两个程序

标签:负载,优先级,僵尸,管理,内存,进程,CPU
From: https://www.cnblogs.com/cloudwangsa/p/18563744

相关文章

  • 计划任务管理
    计划任务管理at;crontabat:一次性计划任务at是一个用于在指定时间运行一次性命令的Linux工具。1.基本语法at[选项]时间2.时间格式at支持多种时间格式,常见的包括:指定的日期和时间:at10:00:在当天的10:00运行。at15:3010/31:在10月31日的15:30运行。......
  • 磁盘管理
    文件系统ext4:小文件多场景xfs:大文件多场景格式化文件系统mkfs文件是由inode和block组合而成inode是元数据--文件大小,文件拥有人拥有组,文件时间戳,文件指针,文件权限删除数据的时候只是删除索引,当有新数据写入才会删除索引blocksize文件系统的最小存储单元,默认是4k......
  • 计算机毕业设计推荐】基于SpringBoot+Vue的甜品店管理系统的设计与实现 【附源码+数据
    ✍✍计算机编程指导师⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流!⚡⚡Java实战|SpringBoot/SSMPython实战项目|Django微信小程......
  • SSM仓库员工管理系统88qro--(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、项目背景与意义随着物流行业的快速发展,仓库作为物流链条中的重要环节,其管理效率直接影响到整个物流体系的运作。仓库员工作为仓库运营的核心力......
  • SSM殡仪馆管理系统s5n80(程序+源码+数据库+调试部署+开发环境)
    题目:殡仪馆管理系统进度安排:(1)2024年11月1日-2024年11月15日 确定选题,下达任务书,撰写开题报告;(2)2024年11月15日-2024年12月20日提交开题报告定稿;(3)2024年12月21日-2025年3月14日 完成选题的设计、论文大纲的撰写;(4)2025年3月15日-2025年3月21日  毕业(设计)论文中期检查......
  • 【C++】绘制内存管理的地图
    生活是属于每个人自己的感受,不属于任何人的看法。前言 这是我自己学习C++的第二篇博客总结。后期我会继续把C++学习笔记开源至博客上。 上一期笔记是关于C++的类与对象础知识,没看的同学可以过去看看: 【C++】面向对象编程的艺术之旅-CSDN博客https://blog.csdn.net/......
  • flask毕设大学生创新创业项目管理网站(论文+程序)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景在当前全球创新创业浪潮的推动下,大学生作为最具活力和创造力的群体,其创新创业活动日益受到社会各界的广泛关注。关于大学生创新创业项目管......
  • flask毕设大学生创新创业项目管理系统(论文+程序)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景随着国家对创新创业教育的重视和推广,大学生创新创业项目日益增多,如何高效、系统地管理这些项目成为高校面临的重要问题。关于创新创业项目......
  • [2006]基于JAVA的洗衣店会员管理系统的设计与实现
    毕业设计(论文)开题报告表姓名学院专业班级题目基于JAVA的洗衣店会员管理系统的设计与实现指导老师(一)选题的背景和意义选题背景与意义:随着社会经济的快速发展和生活节奏的不断加快,洗衣服务行业作为日常生活服务的重要组成部分,其信息化、智能化管理水平直接影响着顾客体......
  • [2005]基于JAVA的洗浴智慧管理系统的设计与实现
    毕业设计(论文)开题报告表姓名学院专业班级题目基于JAVA的洗浴智慧管理系统的设计与实现指导老师(一)选题的背景和意义背景:随着信息技术的飞速发展和大数据时代的来临,各行各业都在积极推进信息化建设,以提高管理效率和服务质量。在休闲服务业中,洗浴中心作为一种常见的大众......