浅谈 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,一经查实,立即删除!

相关文章

软考-计算题

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

黑猫的牌面

解法&#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…

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

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

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

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

【力扣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(…

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

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

探秘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;能不能在不影响已经配好的那些监控项的情况下让新的环境变量生效&#…

win安装卸载python3.13

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

作业1-224——P1331 海战

思路 深搜的方式&#xff0c;让它只遍历矩形块&#xff0c;然后在下面的遍历中判断是否出现矩形块交叉&#xff0c;但是很难实现&#xff0c;然后发现可以通过在遍历过程中判断是否合法。 参考代码 #include<iostream> #include<cstdio> using namespace std; …

SQLSERVER 2014 删除数据库定时备份任务提示失败DELETE 语句与 REFERENCE 约束“FK_subplan_job_id“冲突

SQLSERVER 2014 删除数据库定时备份任务提示失败DELETE 语句与 REFERENCE 约束“FK_subplan_job_id“冲突 &#xff0c;错误如图&#xff1a; 问题原因&#xff1a;不能直接删除作业 任务&#xff0c;需要先删除计划里面的日志、删除代理作业、删除子计划以后才能删除作业。 解…

蓝桥杯:真题讲解3(C++版)附带解析

报纸页数 来自&#xff1a;2016年七届省赛大学C组真题&#xff08;共8道题) 分析&#xff1a; --画出报纸长的样子&#xff0c;如果我们在上面多画一张报纸&#xff0c;那么就符合题意的5&#xff0c;6&#xff0c;11&#xff0c;12。 观察这张图&#xff1a;观察3&#xf…

力扣:35. 搜索插入位置

力扣&#xff1a;35. 搜索插入位置 描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,…

Mybatis | Mybatis的核心配置

目录: Mybatis的核心配置 :一、MyBatis的 “核心对象”1.1 SqlSessionFactory1.2 SqlSession :SqlSession对象中的操作数据库的方法 :\<T> T selectOne ( String statement )\<T> T selectOne( String statement , Object parameter )\<E> List\<E> se…

openGauss学习笔记-232 openGauss性能调优-系统调优-资源负载管理-资源管理准备-资源规划

文章目录 openGauss学习笔记-232 openGauss性能调优-系统调优-资源负载管理-资源管理准备-资源规划 openGauss学习笔记-232 openGauss性能调优-系统调优-资源负载管理-资源管理准备-资源规划 完成资源负载管理功能配置前&#xff0c;需要先根据业务模型完成租户资源的规划。业…

绍兴市新昌县人大一行莅临迪捷软件走访考察

2024年2月29日下午&#xff0c;绍兴市新昌县人大常委会副主任王敏慧一行莅临迪捷软件走访考察&#xff0c;绍兴市委科创委副主任、科创走廊建设领导小组副组长、市人大一级巡视员王继岗&#xff0c;绍兴市科技局副局长、科创走廊建设办公室常务副主任梁枫陪同。 王主任一行听取…

九州金榜|导致孩子厌学因素有哪些?家庭教育中要怎样解决?

现在如今孩子出现厌学的情况越来越严重&#xff0c;这也难坏了很多家长&#xff0c;众所周知&#xff0c;当下社会竞争越来越激烈&#xff0c;孩子的压力也越来越大&#xff0c;这也是导致孩子厌学的主要因素。其实家庭因素也是引起孩子厌学情绪产生的重要原因&#xff0c;在家…

数据结构——二叉树的基本概念及顺序存储(堆)

目录 一.前言 二.树概念及结构 2.1 树的概念 2.2 树的相关概念 2.3 树的表现 2.4 树在实际中的应用&#xff08;表示文件系统的目录树结构&#xff09; 三.二叉树的概念及结构 3.1 概念 3.2 特殊的二叉树 3.3 二叉树的性质 3.4 二叉树的存储结构 3.4.1 顺序存储 3…