浅谈 Linux 孤儿进程和僵尸进程

文章目录

  • 前言
  • 孤儿进程
  • 僵尸进程

前言

本文介绍 Linux 中的 孤儿进程 和 僵尸进程。

孤儿进程

在 Linux 中,就是父进程已经结束了,但是子进程还在运行,这个子进程就被称作 孤儿进程

需要注意两点:

  1. 孤儿进程最终会进入孤儿院,也就是被 init 进程接管,子进程死亡后会被 init 进程回收。
  2. 孤儿进程可以使用 kill -9 结束其运行。

代码演示:产生一个孤儿进程

#include <stdio.h>
#include <unistd.h>/** 代码实现思路:** 前面说过,父进程先于子进程结束,那么子进程就是 孤儿进程。* 所以我们只需要让父进程创建出子进程后,父进程就结束,子进程继续运行(例如 让子进程进入死循环)*/int main() {int pid;pid = fork();if(pid == 0) {// 这是子进程while(1){printf("我是子进程 id: %d, 我进入了死循环...\n", getpid());sleep(2);}} else if(pid > 0) {// 这段时间让我们用 ps 看看父进程结束前的进程信息sleep(10);printf("我是父进程, id: %d  没事我先挂了\n", getpid());}return 0;
}

当运行 test 程序后,输出如下结果:
在这里插入图片描述

此时 sleep(10) 还没结束,我们快速看看进程信息:
在这里插入图片描述

可以看到父进程是 19185,子进程是 19186.

等 10 秒后,控制台继续输出:
在这里插入图片描述

此时我们再使用 ps 看看进程信息:
在这里插入图片描述
可以看到子进程的父进程变成了 1 号进程,确实是被 init 接管了,等子进程自己结束后,init 就是回收它。
该案例是死循环,会一直输出,可以用 kill -9 19186 结束子进程。

僵尸进程

概念:子进程结束了,由于父进程很忙,没时间回收子进程,那么子进程就成了 僵尸进程。

需要记住,无法使用 kill 杀死僵尸进程,都已经是僵尸了,还怎么杀死?
需要使用 kill 杀死他的父进程,让僵尸进程变成孤儿进程,init 会接管/回收孤儿进程。
每个进程结束后都必然会经历僵尸态,时间长短的差别而已。

代码演示:实现一个僵尸进程

#include <stdio.h>
#include <unistd.h>int main() {int pid;pid = fork();if(pid == 0) {// 这是子进程printf("我是子进程 id: %d, 我先挂了\n", getpid());} else if(pid > 0) {printf("我是父进程, id: %d  我在 sleep, 我很忙...\n", getpid());sleep(100);}return 0;
}

程序执行后:
在这里插入图片描述
ps ajx 查看进程状态:
在这里插入图片描述
Z+ 就表示僵尸进程。

要么等待父进程空闲出来回收子进程。
要么手动 kill 父进程,让 init 进程回收子进程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/712821.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一篇Sora模型小白扫盲文——《Sora技术报告》总结

Sora技术报告的核心总结 根据目前公开的一些信息,我个人将Sora技术报告一文中的核心内容总结如下,分别为训练过程的开创性优化技术、模型支持的能力、模型的缺陷。 一、训练过程开创性优化技术 1.ChatGPT的分词(token)处理取得了很好的一致性文本处理能力,Sora也借鉴了这…

勒索病毒普通用户防范建议

勒索病毒普通用户防范建议 定期备份存储在计算机上的数据&#xff0c;这样勒索软件感染不会永远破坏您的个人数据。 最好创建两个备份副本&#xff1a;一个存储在云中&#xff08;记住使用一个自动备份文件的服务&#xff09;&#xff0c;另一个物理存储&#xff08;便携式硬…

软考-计算题

1.二维矩阵转换成一维矩阵 2.算术表达式&#xff1a; 3.计算完成项目的最少时间&#xff1a;之前和的max&#xff08;必须之前的所有环节都完成&#xff09; 松弛时间&#xff1a;最晚开始时间-最早开始时间 最早&#xff1a;之前环节都完成的和的max 最晚&#xff1a;总时间…

基于区块链技术的物联网设备影子服务

一&#xff0e; 背景 物联网设备影子是指真实的物联网设备在物联网平台中对应的虚拟设备&#xff0c;设备影子服务存储了对应物理设备的当前数据。用户使用物联网设备的实时数据都是从物联网设备影子服务获取&#xff0c;如果设备影子服务的数据被修改&#xff0c;就容易导致…

黑猫的牌面

解法&#xff1a; 桶 #include <iostream> #include <vector> #include <algorithm> using namespace std; #define endl \nint main() {ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);vector<int> tong(1001);int t 4;int k, pai;long lon…

LeetCode 每日一题 树合集 Day 16 - 27

终于是开学了&#xff0c;想了想每日一更频率太高&#xff0c;以后每周更新一周的每日一题。 103. 二叉树的锯齿形层序遍历 给你二叉树的根节点 root &#xff0c;返回其节点值的 锯齿形层序遍历 。&#xff08;即先从左往右&#xff0c;再从右往左进行下一层遍历&#xff0c…

探索网络通信与序列化:打造现代Web应用的基石20240227

在构建现代Web应用的过程中&#xff0c;理解网络通信协议与数据序列化技术的基本概念至关重要。这些技术不仅是网络世界的基础设施&#xff0c;而且也是开发者设计和实现高效、可靠应用的关键工具。本文旨在深入浅出地介绍这些概念&#xff0c;帮助开发者更好地掌握构建Web应用…

嵌入式开发——面试题操作系统(调度算法)

linux7种进程调度算法 1&#xff1a;先来先服务&#xff08;FCFS&#xff09;调度算法 原理&#xff1a;按照进程进入就绪队列的先后次序进行选择。对于进程调度来说&#xff0c;一旦一个进程得到处理机会&#xff0c;它就一直运行下去&#xff0c;直到该进程完成任务或者因等…

阿里云降价,这泼天的富贵你接不接?附云服务器价格表

阿里云能处&#xff0c;关键时刻ta真降价啊&#xff01;2024新年伊始阿里云带头降价了&#xff0c;不只是云服务器&#xff0c;云数据库和存储产品都降价&#xff0c;阿里云新老用户均可购买99元服务器、199元服务器&#xff0c;续费不涨价&#xff0c;阿里云百科aliyunbaike.c…

智能指针(Smart Pointers)

定义 智能指针&#xff08;Smart Pointers&#xff09;是C中的一种高级特性&#xff0c;它提供了一种自动管理动态分配内存的机制。通过智能指针&#xff0c;开发者可以避免手动管理内存所带来的问题&#xff0c;如内存泄漏和悬挂指针等。智能指针的主要目的是确保当对象不再需…

【力扣hot100】刷题笔记Day17

前言 今天竟然不用开组会&#xff01;天大的好消息&#xff0c;安心刷题了 46. 全排列 - 力扣&#xff08;LeetCode&#xff09; 回溯&#xff08;排列&#xff09; class Solution:def permute(self, nums: List[int]) -> List[List[int]]:# 回溯def backtrack():if len(…

C++学习第四天(类与对象下)

1、构造函数的其他知识 构造函数体赋值 在创建对象时&#xff0c;编译器通过调用构造函数&#xff0c;给对象中各个成员变量一个合适的初始值 构造函数调用之后&#xff0c;对象中已经有了一个初始值&#xff0c;但是不能将其称为对对象中成员变量的初始化&#xff0c;构造函…

Nginx+keepalived 高可用高性能

什么是高可用: 在使用 Nginx 做反向代理或者负载均衡的时候,都是以 Nginx 为入口,如果 Nginx 宕机了,那么所有的服务都无法正常提供,影响非常严重。所有我们需要保证 nginx 高可用,就是配置备份机,前一个挂了,还有后一个。 为了避免负载均衡服务器宕机造成严重影响,…

关于游戏报错提示x3daudio1_7.dll丢失怎么修复?多个实测有效方法分享

x3daudio1_7.dll 是一个与 Microsoft DirectX 相关的重要动态链接库&#xff08;DLL&#xff09;文件&#xff0c;它主要服务于Windows操作系统下的多媒体和游戏应用程序。 一、以下是关于 x3daudio1_7.dll 文件的详细介绍 名称与位置&#xff1a; 文件名&#xff1a;x3daud…

PHP堆栈+errLog定位

调用堆栈&#xff08;Call Stack&#xff09;是一个记录了程序在运行时所有活动子例程的栈结构。它以函数调用的方式描述了程序的执行流程和调用关系。 在PHP中&#xff0c;我们可以通过打印PHP调用堆栈来辅助调试和定位代码中的问题。本文将介绍如何在PHP中打印调用堆栈&…

探秘Python的Pipeline魔法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站AI学习网站。 目录 前言 什么是Pipeline&#xff1f; Pipeline的基本用法 Pipeline的高级用法 1. 动态调参 2. 并行处理 3. 多输出 …

Spring底层源码分析

spring依赖注入底层原理解析 spring之bean对象生命周期步骤详情 流程&#xff1a; UserService.class —>推断构造方法—>普通对象----依赖注入------>初始化&#xff08;afterPropertiesSet方法&#xff09;------>初始化后&#xff08;AOP&#xff09;------…

Zabbix“专家坐诊”第231期问答

问题一 Q&#xff1a;用docker-compose部署zabbix&#xff0c;部署完后如果要修改zabbix的配置应该要改docker-compose文件里的环境变量吧&#xff1f;改了环境变量之后只能重建容器才能生效吗&#xff1f;能不能在不影响已经配好的那些监控项的情况下让新的环境变量生效&#…

洛谷P1331海战

题目背景 在峰会期间&#xff0c;武装部队得处于高度戒备。警察将监视每一条大街&#xff0c;军队将保卫建筑物&#xff0c;领空将布满了 F-2003 飞机。 此外&#xff0c;巡洋船只和舰队将被派去保护海岸线。不幸的是&#xff0c;因为种种原因&#xff0c;国防海军部仅有很少…

win安装卸载python3.13

一、安装 访问python官网&#xff1a;https://www.python.org/ 点击“Downloads” 点击“Windows” 找到自己要下载的版本和位数&#xff0c;比如我这个是3.13版本、64位的安装包 下载好了之后&#xff0c;双击安装包 勾选“Add python.exe to PATH”&#xff1a;把python环…