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

孤儿进程和僵尸进程

时间:2024-05-17 18:29:33浏览次数:22  
标签:僵尸 pid 孤儿 init 进程 操作系统

 

孤儿进程和僵尸进程是操作系统中两种不同的进程状态,它们有着不同的特征和产生原因。

1. 孤儿进程:
- 孤儿进程是指父进程退出或意外终止后,子进程仍然在操作系统中运行的情况。由于子进程的父进程已经不存在,操作系统将其托付给init进程(在Unix/Linux系统中是进程号为1的init进程)。
- 孤儿进程不会占用系统资源,因为它们会被init进程接管,init进程负责回收孤儿进程的资源,并且将其状态更新为僵尸进程或者终止掉。

2. 僵尸进程:
- 僵尸进程是指一个进程已经结束了,但是其父进程还没有调用wait()或waitpid()等系统调用来获取子进程的终止状态,导致子进程的进程描述符仍然存在于进程表中,这种进程称为僵尸进程。
- 僵尸进程会占用系统资源,虽然它们不再执行任何代码,但是它们的进程描述符和部分资源仍然被操作系统所占用。
- 如果父进程不处理僵尸进程,大量僵尸进程可能会积累导致系统资源耗尽。

总的来说,孤儿进程是指没有父进程的子进程,由init进程接管;而僵尸进程是指已经结束但是其父进程尚未处理的进程,导致其进程描述符未被释放。在编写程序时,应该注意处理子进程的终止状态,避免产生僵尸进程。

#include <iostream>
#include <unistd.h>

int main() {
pid_t pid = fork(); // 创建子进程

if (pid == 0) { // 子进程
std::cout << "子进程正在运行\n";
// 子进程立即退出
_exit(0);
} else if (pid > 0) { // 父进程
std::cout << "父进程正在运行,子进程ID为:" << pid << "\n";
// 父进程不等待子进程,直接退出

//wait(nullptr);    这个函数表示阻塞并等待子进程退出 如果 不执行这条语句,将会创建僵尸进程
} else { // fork()失败
std::cerr << "fork()失败\n";
return 1;
}

return 0;
}

标签:僵尸,pid,孤儿,init,进程,操作系统
From: https://www.cnblogs.com/whcjob/p/18198393

相关文章

  • 打开、关闭、切换App以及清除App进程,操作so easy!
    此文章来源于项目官方公众号:“AirtestProject”版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途#一、前言很多新手同学在写自动化测试脚本的时候,打开、关闭、切换App的方式还是使用最基础的方式,也有同学在交流群内多次询问是否有打开、关闭、切换App以及清除A......
  • 进程、线程和协程之间的区别和联系
    文章目录一、进程二、线程三、进程和线程的区别与联系四、一个形象的例子解释进程和线程的区别五、进程/线程之间的亲缘性六、协程一、进程进程,直观点说,保存在硬盘上的程序运行以后,会在内存空间里形成一个独立的内存体,这个内存体有自己独立的地址空间,有自己的堆,上级挂靠单......
  • python多进程中嵌入多进程注意事项
    例如代码:frommultiprocessingimportPoolp1=Pool(4)s=[1,2,3,4]foriins:p1.apply_asny(某方法,args=(i))p1.close()p1.join()此时,某方法中也有一个多进程设置,这样的话就是双重多进程,只要是传入的参数之间是没有关系的,那么就没有问题。如果此时,最外层的apply_......
  • mit6.828笔记 - lab3 Part A:用户进程和异常处理
    简单回顾在开始lab3的学习之前,我们先简单回顾下到目前为止,我们的内核能做了什么:lab1中,我们学习了PC启动的过程,看到BIOS将我们编写的bootloader载入内存,然后通过bootloader将内核载入内存。同时,使用了一个写死的临时页表(entry_pgdir)完成了简单的地址映射;我们的内核最后执......
  • linux系统查找占用swap空间最多的10个进程
    linux系统查找占用swap空间最多的10个进程(1)ps-eopid,user,comm,pmem,vsz--sort=-vsz|head-n11(2)foriin$(cd/proc;ls|grep"^[0-9]"|awk'$0>100');doawk'/Swap:/{a=a+$2}END{print"'$i'",a/1024"M"}'......
  • python列出centos7内存使用前50的进程信息
    python代码,列出centos7系统内存使用排名前50的进程信息,按照内存使用大小从大到小排序。 importpsutil#获取系统内存信息total_memory=psutil.virtual_memory().total/(1024.0**3)#转换为GBavailable_memory=psutil.virtual_memory().available/......
  • Linux查看进程命令ps和top示例详解
    Linux 是一种自由和开放源代码的操作系统,它的使用在全球范围内非常广泛。在 Linux 中,进程是操作系统中最重要的组成部分之一,它代表了正在运行的程序。了解如何查看正在运行的进程是非常重要的,因为它可以帮助你了解系统的运行状态并对其进行管理。今天飞飞将和你分享如何在 Lin......
  • 将netcore打包好的程序,以守护进程方式部署到CentOS系统中
     进入守护进程目录:  cdetc/systemd/system创建守护进行服务:vimy-auth.service将如下代码更改为对应的服务,保存后退回[Unit]Description=Auth.NETWebAPIApprunningonCentOS[Service]WorkingDirectory=/home/authExecStart=/usr/bin/dotnet/h......
  • 进程
    进程通信有哪些方式?管道/匿名管道(Pipes):有亲缘关系的父子进程或兄弟进程间的通信,只存在于内存中的文件有名管道(NamedPipes):严格遵循FIFO原则,存在于磁盘介质或文件系统,可以实现对本机任意两个进程的通信。信号(Signal):一种比较复杂的通信方式,用于通知接收进程:某个事件已经发......
  • sql server 批量处理孤儿用户
    declare@uservarchar(20)declare@fix_ouvarchar(100)declarec1cursorforselectd.name--,d.sid,s.name,s.sidfromsys.database_principalsdleftjoinsys.server_principalssond.name=s.namewhered.type_desc='SQL_USER'andd.namenotin(......