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

免费网站建设新技术176网站入口

免费网站建设新技术,176网站入口,旅游网站用dw怎么做,DW网站建设出现哪些问题文章目录 1. 前言1.1 什么是僵尸进程1.2 为什么需要关注僵尸进程 2. 僵尸进程的产生2.2 为什么会产生僵尸进程2.3 举个栗子 3. 僵尸进程的影响3.1 僵尸进程为何会占用系统资源3.2 操作系统如何知道哪个资源需要被释放3.3 什么是进程表3.4 什么是PCB 5. 如何处理僵尸进程4.1 识别… 文章目录 1. 前言1.1 什么是僵尸进程1.2 为什么需要关注僵尸进程 2. 僵尸进程的产生2.2 为什么会产生僵尸进程2.3 举个栗子 3. 僵尸进程的影响3.1 僵尸进程为何会占用系统资源3.2 操作系统如何知道哪个资源需要被释放3.3 什么是进程表3.4 什么是PCB 5. 如何处理僵尸进程4.1 识别僵尸进程第一种方法第二种方法 4.3 清理僵尸进程1. 找到僵尸进程的父进程IDPPID2. 向父进程发送SIGCHLD信号 6. 实例分析7. 参考文档 1. 前言 1.1 什么是僵尸进程 僵尸进程也被称为defunct process 我们在看国外的一些博客的时候会发现僵尸进程又称为 Zombie Processes 。 它是一种已经终止但是仍然在进程表中存在的进程。这种情况通常发生在父进程还没有来得及读取子进程的退出状态而子进程已经结束这样子进程虽然已经结束但是在操作系统中仍然保留了相关记录。 《Processes in a Zombie (Z) or Defunct State》 《How to Clean a Linux Zombie Process》 1.2 为什么需要关注僵尸进程 僵尸进程可能会导致一些问题。首先它们占用了系统资源。虽然僵尸进程自身已经不再运行但是它在进程表中的记录仍然会占用系统资源如果有大量的僵尸进程可能会消耗掉所有的进程表空间导致无法创建新的进程。其次僵尸进程可能会影响到其他进程的运行特别是那些需要读取进程状态或者和已经终止的进程进行交互的进程。因此对于僵尸进程我们需要及时处理避免它们引起更大的问题。 2. 僵尸进程的产生 2.2 为什么会产生僵尸进程 在操作系统中僵尸进程是指原本已经结束运行并退出的进程但是它在系统的进程表中仍然保留有记录。这种情况通常有以下几种可能 父进程没有调用wait()或waitpid()来获取子进程的结束状态。当子进程结束运行后系统会向父进程发送一个SIGCHLD信号。如果父进程没有处理这个信号或者没有正确地获取子进程的结束状态那么子进程就会变成僵尸进程。 父进程在子进程结束之前就已经结束了。这种情况下子进程会被init进程接管init进程会定期调用wait()来回收这些僵尸进程。 父进程由于某种原因没有接收到SIGCHLD信号例如父进程正在执行一个长时间的任务或者被阻塞了。这种情况下子进程的结束状态就无法被父进程获取导致子进程成为僵尸进程。 通俗的说僵尸进程主要是由父进程没有正确处理子进程的结束状态造成的。虽然僵尸进程自身不会消耗除了进程表之外的其他资源但是如果有大量的僵尸进程存在那么进程表的空间就会被耗尽新的进程将无法创建对系统性能会有影响。 2.3 举个栗子 举例来说假设有一个父进程P它创建了一个子进程C。现在子进程C执行了一些任务后完成了。这时内核发送一个SIGCHLD信号给父进程P通知它子进程C已经完成了任务。 如果父进程P在创建子进程C时已经编程执行wait()系统调用那么父进程P会接收到SIGCHLD信号后执行wait()系统调用读取子进程C的状态和退出码并同时清除子进程C在进程表中的记录。 但是如果父进程P在创建子进程C时没有编程执行wait()系统调用那么它就无法读取子进程C的状态和退出码也无法清除子进程C在进程表中的记录。这就导致子进程C虽然已经完成了任务但是它的僵尸状态还是留在进程表中显示为一个僵尸进程。 另外如果父进程P在接收到SIGCHLD信号时由于某种原因比如过载等无法处理该信号那么这也会导致子进程C变成一个僵尸进程。 这些僵尸进程会占用系统资源虽然它们不再执行任何任务但是它们在进程表中的记录仍然存在。这可能会导致系统资源的浪费甚至在极端情况下可能因为进程表已满而无法再创建新的进程。 3. 僵尸进程的影响 3.1 僵尸进程为何会占用系统资源 每个进程结束时都会产生一个退出状态这个状态需要被它的父进程来回收。在父进程回收这个状态之前系统会保留一部分信息比如进程ID、进程状态和退出码等这样父进程就可以知道其子进程结束的详细情况。这部分信息是存放在系统内存中的因此结束的进程直到被其父进程回收之前都会占用一些内存资源。 这就是为何僵尸进程会占用系统资源的底层原理。僵尸进程就是已经结束但是其父进程还未回收其状态的进程因此它们还会占用一部分系统资源。 在Linux系统中如果父进程没有回收子进程的状态内核会把这个任务交给init进程进程ID为1的进程来完成。这就是为什么在系统中看到的大部分僵尸进程其父进程ID都是1的原因。 在多任务环境下如果僵尸进程过多理论情况下可能会导致进程表已满从而无法创建新的进程影响到其他任务的正常进行。看清楚是理论情况下其实在进程表沾满之前其他资源肯定已经耗尽了已经不可能分配进程了。此外僵尸进程还可能导致系统响应时间变慢因为系统需要花费更多的时间来处理并不需要的进程这对于需要快速响应的系统来说是非常不利的。同时僵尸进程占用的内存资源也可能导致其他需要更多内存的任务无法得到足够的内存资源从而影响其性能。 3.2 操作系统如何知道哪个资源需要被释放 这就不得不说 操作系统两个相关的概念 进程表和PCB。 进程表是操作系统中管理进程的数据结构之一。它是一个存储所有进程信息的表格每个进程在表格中都有一个对应的表项。而操作系统通过进程控制块(Process Control Block, PCB)来记录和管理系统中的各个进程。 每个进程有自己的PCB它包含了这个进程的所有重要信息如进程状态、程序计数器、CPU寄存器和堆栈指针、优先级、内存分配状况、资源状态、I/O状态等信息。 当一个进程结束的时候操作系统会根据该进程的PCB中记录的信息来知道需要释放哪些资源例如内存资源、I/O设备等。 操作系统还会通过一些内部的数据结构来记录资源的使用情况例如内存管理子系统会用位图或者链表来记录内存的分配情况文件系统会用索引节点(inode)来记录文件的分配情况等。这些都可以帮助操作系统了解哪些资源正在被使用哪些资源已经空闲从而在需要的时候正确地释放或者分配资源。 3.3 什么是进程表 进程表是操作系统内核内部的一种数据结构用于跟踪和管理系统中的所有进程。每当创建一个新的进程时操作系统就会在进程表中为其分配一个新的条目。 进程表中的每个条目通常包含以下信息 信息类别详细描述进程ID(PID)每个进程的唯一标识符状态进程的当前状态如运行、就绪、阻塞等优先级进程的调度优先级所有者创建该进程的用户或者进程的用户ID进程计数器记录了进程下一条要执行的指令的地址CPU寄存器保存了进程上下文切换时的CPU寄存器状态内存管理信息记录了进程的内存布局以及进程使用的虚拟内存和物理内存等信息文件描述符表记录了进程打开的所有文件和网络套接字执行环境如环境变量等 进程表对于操作系统来说极为重要是实现多任务和进程隔离等核心功能的关键。进程表的主要作用是帮助操作系统管理和调度进程。具体来说它有以下几个作用 进程调度操作系统根据进程表中的信息如进程状态、优先级等来决定下一个要运行的进程。 进程管理操作系统通过进程表来跟踪每一个进程的状态如运行、就绪、阻塞等。 上下文切换当CPU从一个进程切换到另一个进程时操作系统会保存当前进程的状态到进程表并从进程表中恢复新的进程的状态。 内存管理操作系统根据进程表中的信息来管理进程的内存分配包括虚拟内存和物理内存。 文件系统管理操作系统通过进程表中的文件描述符表来跟踪每个进程所打开的文件和网络套接字。 资源管理操作系统使用进程表来管理和跟踪进程所需的其他系统资源如I/O设备、信号量、消息队列等。 3.4 什么是PCB PCB全称为Process Control Block中文名为进程控制块。它是操作系统中一个非常重要的数据结构用于保存和描述一个进程的基本信息和运行状态。 通俗的说PCB就是操作系统对进程的一种抽象它包含了操作系统管理和控制进程所需要的所有信息。 PCB的主要作用如下 进程调度在多道程序设计中操作系统需要进行进程的调度和切换PCB中保存的进程状态和调度信息例如进程优先级可以帮助操作系统做出决策。 进程同步和通信PCB中保存了进程的同步和通信机制比如信号量等帮助实现进程间的协调运行。 进程管理通过PCB操作系统可以对进程进行管理和控制如创建、终止进程修改进程的状态等。 资源管理PCB中保存了进程的资源使用情况比如CPU时间、内存空间等可以帮助操作系统进行资源的分配和回收。 5. 如何处理僵尸进程 4.1 识别僵尸进程 识别僵尸进程的方法是使用ps命令。在查看僵尸进程时只需要关注STAT列的值是否为Z。 第一种方法 查看所有进程的状态 $ ps aux输出示例 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 16444 2580 ? Ss Jan21 0:02 /sbin/init root 2 0.0 0.0 0 0 ? S Jan21 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S Jan21 0:01 [ksoftirqd/0] ... user 32345 0.0 0.1 34364 2928 pts/1 Z 01:30 0:00 [myprocess] defunct ...在上面的输出中STAT列的值为Z的进程如PID为32345的进程就是僵尸进程。 第二种方法 也可以使用以下命令直接列出所有僵尸进程 $ ps aux | grep -w Z输出示例 user 32345 0.0 0.1 34364 2928 pts/1 Z 01:30 0:00 [myprocess] defunct这条命令会过滤出所有STAT列值为Z的进程。 4.3 清理僵尸进程 要清理僵尸进程需要向其父进程发送SIGCHLD信号以通知它回收子进程。通常情况下父进程会在子进程结束时自动回收它。但在某些情况下父进程可能没有正确地回收子进程导致子进程成为僵尸进程。下面是清理僵尸进程的方法 1. 找到僵尸进程的父进程IDPPID $ ps -el | grep -w Z输出 F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 0 Z 1000 32345 1001 0 80 0 - 0 exit pts/1 00:00:00 myprocess defunct2. 向父进程发送SIGCHLD信号 $ kill -s SIGCHLD 1001这将通知进程1001回收其子进程。 如果向父进程发送SIGCHLD信号后僵尸进程仍未被清理那么可以尝试杀死父进程。这样僵尸进程将被init进程PID为1接管并自动清理。$ kill -s SIGTERM 10016. 实例分析 《How to Clean a Linux Zombie Process》 https://www.baeldung.com/linux/clean-zombie-process 7. 参考文档 https://www.geeksforgeeks.org/process-table-and-process-control-block-pcb/
http://wiki.neutronadmin.com/news/243416/

相关文章:

  • 公司想建个网站怎么弄wordpress进销存插件
  • aqq网站开发菲律宾
  • 海珠区建网站公司域名查询官方网站
  • 做阿里国际网站要收费吗wordpress更新慢
  • 安阳网站制作价格东莞哪里有网页设计
  • 南京网站建设制作wordpress 英文 企业网站模板
  • 上海网站外包建设小米发布会13
  • 我的世界封面制作网站高性能网站建设指南 书
  • 网站的前端和后端wordpress分类目录seo
  • 软件开发模式有哪些kj6699的seo综合查询
  • 廊坊网站建设推广经验eclipse可以做门户网站嘛
  • 网站备案包括做空气开关那个网站推广比较好
  • 肇庆网站开发建立自信
  • 免费建微网站深圳外贸网站建设口报关
  • 如何知道网站是否备案过佛山外贸网站建设方案
  • 做网站网站犯法吗wordpress主题安装完后前台打不开
  • 专业的手机网站建设公司免费高清视频软件
  • 如何做国际贸易网站零食店网站构建策划报告
  • 互联网客户做网站网站建设服务的会计处理
  • 免费黄页营销网站网站开发高级工程师
  • 东莞微网站建设费用有没有一个网站做黄油视频
  • 哪些网站平台可以做推广wordpress国内不使用方法
  • 个人做网站租云服务器最近播放中文版在线观看电视剧
  • 合肥市建设工程市场价格信息网站中国500强企业
  • 网站建设所需的软件邯郸自媒体有哪些
  • 如何给网站做防御成都网站维护
  • ps做网站图片水印中国建设银行网站的社保板块在哪里
  • 做网站如何分类宁波公司网站开发
  • 简述建设一个网站的一般过程阿里云网站建设方案书
  • 导航网站html模板外包接单网