首页 > 系统相关 >僵尸进程和孤儿进程

僵尸进程和孤儿进程

时间:2024-03-07 09:03:27浏览次数:25  
标签:__ 结束 僵尸 孤儿 init 进程

(一)引入

  • 我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。
  • 子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。
  • 当一个 进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态。

(二)僵尸进程(有害)

(1)什么是僵尸进程

  • 僵尸进程是指完成了自己的任务,但父进程没有正确地释放它所占用的系统资源
  • 导致它仍然存在于进程列表中
  • 但已经停止了运行。
  • 这些僵尸进程会占据一定的系统内存,并在一定程度上影响系统的性能。
  • 僵尸进程
    • 就是对于子进程来说,子进程死亡的时候,这部分资源并未被释放掉
    • 这种现象对于死亡的子进程来说就是僵尸进程

示例:

  • 当子进程开设后,该进程死后不会立刻释放占用的进程号
    • 因为要让父进程能够查看到开设的子进程的一些基本信息
      • 占用的 PID 号,运行时间等
  • 所有的进程都会步入僵尸进程
    • 父进程不死并且在无限制的创建子进程并且子进程也不结束
  • 如何回收子进程占用的 PID 号
    • 父进程等待子进程运行结束
    • 父进程调用 join 方法
"""僵尸进程"""
# 导入模块
from multiprocessing import  Process
import time
def test():
    print(f"子进程开始")
    time.sleep(3)
    print(f"子进程结束")

if __name__ == '__main__':
    p=Process(target=test)
    p.start()
    print("结束!!")

"""
僵尸进程
    主进程已经结束
    但是对于子进程来说
    子进程死亡的时候,子进程的这部分资源还未被释放
    对于死亡的子进程来说 就是僵尸进程
"""
# 结束!!
# 子进程开始
# 子进程结束

(三)孤儿进程

(1)什么是孤儿进程

  • 孤儿进程则是指父进程在子进程终止之前就已经退出了

  • 导致子进程失去了与父进程通信的能力。

  • 这些孤儿进程将被init进程接管

  • init进程会等待它的状态信息并释放它的系统资源。

  • 孤儿进程

    • 就是说,父进程在子进程终止之前就已经停止了
    • 留下了的子进程失去了与父进程的通信能力
    • 这些孤儿进程被init进程接管
    • init进程会等待它的状态信息并释放它的系统资源

示例

  • 子进程存活,父进程意外死亡
    • 没有父进程来帮助回收 PID 号
  • 解决办法
    • 操作系统会开设一个儿童福利院(init 进程)专门管理孤儿进程回收相关资源

(四)僵尸进程与孤儿进程的比较

  • 僵尸进程的危害大于孤儿进程
  • 僵尸进程会占用大部分的资源,并且这部分资源没人来处理
  • 孤儿进程虽然父进程没了,但是会有init进程将这部分资源释放处理掉

标签:__,结束,僵尸,孤儿,init,进程
From: https://www.cnblogs.com/suyihang/p/18058076

相关文章

  • 进程退出:SIGINT、SIGTERM和SIGKILL区别
    普通用户使用的信号:信号值      符号      行为2          SIGINT    进程终端,CTRL+C9          SIGKILL   强制终端15         SIGTEM    请求中断20         SIGTOP    停止(挂起)进程CRTL+DSIGINT、SI......
  • 进程与线程、同步与异步
    前言在计算机编程中,同步与异步、进程与线程是两组基本概念,对于理解并发编程至关重要。本文将深入探讨这些概念,解析它们的含义、特点以及在实际编程中的应用。进程和线程进程(Process)和线程(Thread)是计算机科学中重要的概念,它们都与程序执行和并发相关。进程:定义:进程是操作系......
  • windows 查询占用端口进程并清理
    查找占用端口的进程号:netstat-ano|findstr9000根据进程号查找占用端口的进程信息(16240为进程号):tasklist|findstr16240关闭占用端口的进程:使用进程号(16240为进程号):taskkill/f/pid16240 2.使用进程名:taskkill /f ......
  • 进程通信-管道
    进程通信-管道//让进程间相互影响,相互收发信息(全局变量不行)//父子进程可以,两个不同程序的进程也可以相关概念管道:无名管道/有名管道//名指路径名//有没有使用文件管道文件fifo单工,双工,半双工(收发一时其一)无名管道特点:固定读写段,fd[0]读/fd[1]写,读端只能......
  • (续)signal-slot:python版本的多进程通信的信号与槽机制(编程模式)的库(library) —— 强化学
    前文:signal-slot:python版本的多进程通信的信号与槽机制(编程模式)的库(library)——强化学习ppo算法库sample-factory的多进程包装器,实现类似Qt的多进程编程模式(信号与槽机制)——python3.12版本下成功通过测试......
  • 在Docker中,docker run指令执行后,生成了哪些进程?
    当执行dockerrun指令后,Docker会启动一个新的容器实例。这个过程中会涉及多个进程和组件的交互。以下是dockerrun指令执行后生成的主要进程和组件:DockerDaemon(守护进程):DockerDaemon是Docker的后台服务,它长期运行并管理Docker容器、镜像、网络和卷等资源。当执......
  • 一文讲明白Java中线程与进程、并发与并行、同步与异步
    写在开头ok,everybody,在过去的两周内,我们大体上讲完了Java的集合,在最后我们探讨了关于HashMap线程不安全的原因,又提出了ConcurrentHashMap这个线程安全的集合解决方案,那么在接下来的2-3周内,我们就一起来学习一下Java中的并发多线程。在开始学习之前,我们必须要搞清楚几个概念:线程......
  • unhide 是一款强大的取证工具,主要用于查找和发现被隐藏的进程、TCP/UDP端口以及其他隐
    unhide是一款强大的取证工具,主要用于查找和发现被隐藏的进程、TCP/UDP端口以及其他隐藏技术。其基本技术原理如下:ROOTKIT和LKM:ROOTKIT(RootKit)是一种恶意软件,常用于隐藏恶意活动和进程。它通过修改操作系统的核心组件和内核模块(LinuxKernelModule,LKM)来实现对系统的隐匿。u......
  • 并发编程补充:基于多进程实现并发的套接字通信
    服务端:frommultiprocessingimportProcessfromsocketimport*deftalk(conn):whileTrue:try:data=conn.recv(1024)ifnotdata:breakconn.send(data.upper())exceptConnectionResetError:......
  • 僵尸小白
    #include<iostream>#include<string>#include"minecraft.h"usingnamespacestd;TxMinecraftmc;intmain(intargc,char**argv){ boolcon=mc.ConnectMinecraft("zk","08bd17c1ea594f2684182fd956c2d172"); if(!con)......