僵尸进程、孤儿进程、守护进程
【一】僵尸进程和孤儿进程
【1】引入
-
我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。
-
子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。
-
当一个 进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态。
【2】僵尸进程
(1)什么是僵尸进程
僵尸进程是指完成自己的任务之后,没有被父进程回收资源
例如:开了一个pycharm ---> 将 pycharm 关闭 --> 任务管理器所有的关于 pycharm 的进程应该都被关闭,但是有时候会发现,有某几个 pycharm 进程任然在后台运行 --> 本来这部分资源应该被回收,结果因为还在运行,占用系统资源
(2)解决办法
-
因此,UNⅨ提供了一种机制可以保证父进程可以在任意时刻获取子进程结束时的状态信息
-
-
在每个进程退出的时候,内核释放该进程所有的资源,包括打开的文件,占用的内存等。
-
-
-
-
但是仍然为其保留一定的信息(包括进程号the process ID,退出状态the termination status of the process,运行时间the amount of CPU time taken by the process等)
-
-
-
-
直到父进程通过wait / waitpid来取时才释放.
-
-
-
-
但这样就导致了问题,如果进程不调用wait / waitpid的话,那么保留的那段信息就不会释放,其进程号就会一直被占用,但是系统所能使用的进程号是有限的
-
如果大量的产生僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程. 此即为僵尸进程的危害,应当避免。
-
-
-
任何一个子进程(init除外)在exit()之后,并非马上就消失掉,而是留下一个称为僵尸进程(Zombie)的数据结构,等待父进程处理。
-
-
这是每个子进程在结束时都要经过的阶段。
-
如果子进程在exit()之后,父进程没有来得及处理,这时用ps命令就能看到子进程的状态是“Z”。
-
如果父进程能及时 处理,可能用ps命令就来不及看到子进程的僵尸状态,但这并不等于子进程不经过僵尸状态。
-
如果父进程在子进程结束之前退出,则子进程将由init接管。
-
init将会以父进程的身份对僵尸状态的子进程进行处理。
-
(3)示例:
import multiprocessing
import time
def work(name):print(f'{name} is starting ...')time.sleep(2)print(f'{name} is ending ...\n')
def main():for i in range(3):task = multiprocessing.Process(target=work,args=(f'task_{i}',))task.start()
if __name__ == '__main__':print(f'main process starting ...')main()print(f'main process ending ...')
# main process starting ...
# main process ending ...
# task_0 is starting ...
# task_1 is starting ...
# task_2 is starting ...
# task_0 is ending ...
# task_1 is ending ...
# task_2 is ending ...
【3】孤儿进程
(1)什么是孤儿进程
孤儿进程是指父进程在子进程终止之前就退出了
例如:在没有关闭共享屏幕的前提下,直接退出腾旭会议,这时共享屏幕也会退出,不会还挂在后台
在主程序死亡以后,因为子进程就没有办法再和主进程通信。就像是有一个福利院 init进程 会接管这些没有父亲的孤儿,如果最后没有人来领取吗就把所有子线程杀死
(2)示例:
import os
import sys
import time
if __name__ == '__main__':pid = os.getpid()ppid = os.getppid()print('父进程:','pid:',pid,'ppid:',ppid)pid = os.fork()# 执行pid=os.fork()则会生成一个子进程# 返回值pid有两种值:# 如果返回的pid值为0,表示在子进程中# 如果返回的pid值>0,表示在父进程中if pid > 0:print('父进程终止')sys.exit(0)# 保证主线程退出完毕time.sleep(1)print('我是子进程:',os.getpid(),os.getppid())
【4】僵尸进程和孤儿进程谁的危害性更大?
-
僵尸进程的危害性更大,因为僵尸进程一直会持续存在,在后台占用资源,孤儿进程会因为主进程的死亡,然后有init进程接管,并销毁
例如:有个进程,它定期的产 生一个子进程,这个子进程需要做的事情很少,做完它该做的事情之后就退出了,因此这个子进程的生命周期很短,但是 父进程只管生成新的子进程,至于子进程 退出之后的事情,则一概不闻不问,这样的话系统运行一段后就会存在很多僵尸进程,如果实在Linux中的话可以使用ps命令查看,就可以看到很多状态为Z的进程
严格来说,僵尸进程并不是问题的根源,罪魁祸首是产生大量僵尸进程的父进程,因此,当我们需要消灭系统中大量的僵尸进程时,最好的办法就是将制造的元凶干掉(也就是通过kill发送SIGTERM或者SIFKILL信号),如此的话由他产生的僵尸进程就变成了孤儿进程,就会被init接管,然后wait()这些孤儿进程,即释放了
【二】守护进程
【1】什么是守护进程
-
守护进程时一种特殊的进程,只要系统不关机,就会一直存在
-
它们通常不与用户直接交互,也不接受标准输入和输出,而是在后台执行某种任务或提供某种服务。
-
守护进程往往是由系统管理员手动启动的,它们可以在系统启动时自动启动,一直运行在后台,直到系统关闭或被停止,而且不需要用户交互有较高的权限,因此编写守护进程需要注意安全性和稳定性
-
常见的守护进程包括网络服务(如web服务器、邮件服务器、ftp服务器)、日志记录系统
-
例如:安装一个MySQL服务(TCP服务端),关机会导致服务端关闭,MySQL服务加一个守护进程,只要系统不关机,MySQL服务就会一直在后台运行,除非主动杀死
示例:
from multiprocessing import Process
import time
def task(name):print(f'皇太妃 :>>{name}>>正常存活')time.sleep(2)print(f'皇太妃 :>>{name}>>正常死亡')
if __name__ == '__main__':print(f'皇帝 :>>> ChiMeng >>> 执掌江山')p = Process(target=task, args=('dream',))
p.start()
print(f'皇帝 :>>> ChiMeng >>> 寿终正寝')# 主进程结束,子进程未结束# 皇帝 :>>> ChiMeng >>> 执掌江山
# 皇帝 :>>> ChiMeng >>> 寿终正寝
# 皇太妃 :>>dream>>正常存活
# 皇太妃 :>>dream>>正常死亡相关文章:
僵尸进程、孤儿进程、守护进程
【一】僵尸进程和孤儿进程 【1】引入 我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。 子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。 当一个 进程完成它…...
【工程化】CJS 和 ESM
common js require 函数的原理伪代码: function require(path) {if (该模块有缓存) {return 该模块的缓存}function _run(exports, require, module, __filename, __dirname) {// 模块代码}// module.exports 即为模块导出的对象var module { exports: {} };_run…...
记录:mac pro 16-inch,2019安装ubuntu双系统
需要的装备:u盘,扩展坞、有线键鼠、ext4硬盘 目的:编译aosp 11 1、首先是参照如下文章,分配空间,制作启动盘(测试ubuntu20.04不行,ubuntu22.04正常) https://blog.csdn.net/LBSGKD…...
WordPress主题 7B2 PRO 5.4.2 免授权开心版源码
本资源提供给大家学习及参考研究借鉴美工之用,请勿用于商业和非法用途,无任何技术支持! WordPress主题 7B2 PRO 5.4.2 免授权开心版源码 B2 PRO 5.4.2 最新免授权版不再需要改hosts,和正版一样上传安装就可以激活。 直接在Word…...
GPT‑4o普通账户也可以免费用
网址 https://chatgpt.com/ 试了一下,免费的确实显示GPT‑4o的模型,问了一下可以联网,不知道能不能通过插件出图 有兴趣的可以试试...
复制即用!纯htmlcss写的炫酷input输入框
一般我们写css样式都要用样式库,但是嫌麻烦,如果能找到现成的内容复制上去就很香了,下文是笔者觉得好看的纯html&css写的样式,可以直接复制到Vue等内,十分方便。 input组件 1) 下面这个很推荐&#…...
前端 CSS 经典:弧形边框选项卡
1. 效果图 2. 开始 准备一个元素,将元素左上角,右上角设为圆角。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, i…...
前端面试题日常练-day21 【面试题】
题目 希望这些选择题能够帮助您进行前端面试的准备,答案在文末。 AJAX 是什么的缩写? a) Asynchronous JavaScript and XMLb) Asynchronous JavaScript and XHTMLc) Asynchronous Java and XMLd) Asynchronous Java and XHTML使用 AJAX 可以实现以下哪…...
几起 Linux 问题解决分享
(首发地址:学习日记 https://www.learndiary.com/2024/05/linux-problems/) 朋友们,大家好!我是淘宝网学习日记小店专注于Linux服务领域的 learndiary,今天很高兴能与大家分享近期处理的一些Linux故障案例&…...
LeetCode题解:9. 回文数,翻转一半数字,JavaScript,详细注释
原题链接 9. 回文数 解题思路 翻转数字 利用循环,每次将x右移一位将移出的数字存储到reversed的个位中每次存储前,需要将reversed左移一位 判断结果 当原x的长度为偶数,翻转后的结果相等当原x的长度为奇数,reversed一定比翻转后…...
微博:一季度运营利润9.11亿元,经营效率持续提升
5月23日,微博发布2024年第一季度财报。一季度微博总营收3.955亿美元,约合28.44亿元人民币,超华尔街预期。其中,广告营收达到3.39亿美元,约合24.39亿元人民币。一季度调整后运营利润达到1.258亿美元,约合9.1…...
Mysql总结1
Mysql常见日志 (1)错误日志:记录数据库服务器启动、停止、运行时存在的问题; (2)慢查询日志:记录查询时间超过long_query_time的sql语句,其中long_query_time可配置,且…...
three.js能实现啥效果?看过来,这里都是它的菜(05)
这是第五期了,本期继续分享three.js可以实现的3D动画案例,捎带讲一下如何将模型导入到three.js中。 如何将模型导入three.js中 three.js可以通过多种方式导入3D模型,以下是其中几种常见的方法: 使用three.js自带的OBJLoader或M…...
innerText和innerHTML的区别
innerHTML和innerText都是元素的属性,通过修改这个元素的属性可以达到修改元素内容的目的。但是二者之间略有不同。具体来说,它们的区别如下: innerHTML可以获取或设置元素内部的HTML内容,包括HTML标签,而innerText则…...
O2OA(翱途)开发平台数据统计如何配置?
O2OA提供的数据管理中心,可以让用户通过配置的形式完成对数据的汇总,统计和数据分组展现,查询和搜索数据形成列表数据展现。也支持用户配置独立的数据表来适应特殊的业务的数据存储需求。本文主要介绍如何在O2OA中开发和配置统计。 一、先决…...
网关过滤器使用及其原理分析
1.网关过滤器介绍 网关过滤器的用途一般是修改请求或响应信息,例如编解码、Token验证、流量复制等 官方文档地址:Spring Cloud Gateway 网关过滤器分为GloablFilter、GatewayFilter及DefaultFilter 过滤器的执行顺序由Order决定,Order值越小,优先级越高,越先执行 1.1…...
jiebaNET中文分词器
最近我接手了一个有趣的需求,需要对用户评价进行分词,进行词频统计和情绪分析,并且根据词频权重制成词云图以供后台数据统计,于是我便引入了jieba分词器,但是我发现网上关于jiebaNET相关文档实在太少了,甚至连配置文件…...
springboot3项目练习详细步骤(第四部分:文件上传、登录优化、多环境开发)
目录 本地文件上传 接口文档 业务实现 登录优化 SpringBoot集成redis 实现令牌主动失效机制 多环境开发 本地文件上传 接口文档 业务实现 创建FileUploadController类并编写请求方法 RestController public class FileUploadController {PostMapping("/upload&…...
视觉里程计的融合方法及优缺点分析
视觉里程计是视觉slam的一部分,即前端部分,用于前端跟踪并建立局部地图。多用于重定位或辅助定位,常用的有特征点法,光流法和直接法,其区别和优缺点如下。 特征点法,需要计算特征点和描述子,计算…...
SQL常用基础语句(一)-- FGHIJ开头
GROUP BY GROUP BY语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表。在GROUP BY子句后面包含了一个HAVING子句,HAVING类似于WHERE,(唯一的差别是WHERE过滤行,HAVING过滤组࿰…...
FanControl终极指南:免费开源的风扇控制神器,轻松解决Windows散热与噪音问题
FanControl终极指南:免费开源的风扇控制神器,轻松解决Windows散热与噪音问题 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https:…...
突破存储限制:群晖DSM7下Synology Photos自定义文件夹挂载实战
1. 为什么需要自定义文件夹挂载 很多群晖用户升级到DSM7后都会遇到一个头疼的问题:Synology Photos默认把所有个人照片都存放在/home/Photos目录下,而这个目录实际上位于/homes共享文件夹中。随着照片数量不断增加,/homes所在存储空间很快就会…...
Nix构建确定性AI编程环境:解决Cursor编辑器依赖冲突难题
1. 项目概述:当代码编辑器遇上Nix的确定性魔法 最近在折腾开发环境时,我遇到了一个老生常谈但又无比头疼的问题:团队里新来的同事怎么也跑不起来我本地运行得好好的一个代码辅助工具链。依赖版本冲突、系统库路径不对、甚至是因为他用的macO…...
如何在Mac上轻松导出微信聊天记录:WeChatExporter完整指南
如何在Mac上轻松导出微信聊天记录:WeChatExporter完整指南 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你是否曾因误删重要微信聊天记录而焦虑?…...
3分钟上手RePKG:轻松提取Wallpaper Engine壁纸资源的终极指南
3分钟上手RePKG:轻松提取Wallpaper Engine壁纸资源的终极指南 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg 你是否曾经遇到过这样的困扰?在Wallpaper Engi…...
终极显卡调校指南:如何用NVIDIA Profile Inspector释放游戏性能
终极显卡调校指南:如何用NVIDIA Profile Inspector释放游戏性能 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector NVIDIA Profile Inspector是一款专为NVIDIA显卡用户设计的免费优化工具&…...
ElevenLabs匈牙利语音API响应延迟飙升300%?内网穿透+CDN缓存+匈牙利语音素预加载三阶优化方案
更多请点击: https://intelliparadigm.com 第一章:ElevenLabs匈牙利文语音API响应延迟飙升300%的现象复现与根因定位 近期多位开发者反馈,ElevenLabs API 在处理匈牙利语(hu-HU)文本转语音请求时,平均端到…...
基于Stable Diffusion与LoRA技术打造个人AI头像:从原理到实战
1. 项目概述:当AI开始“自拍”——SelfyAI的定位与核心价值最近在AI图像生成领域,一个名为SelfyAI的项目引起了我的注意。它不是一个简单的文生图工具,而是瞄准了一个非常具体且高频的需求:生成高质量、风格一致的个人AI头像。简单…...
CN2628 可用太阳能供电 5 伏特低压差电压调制集成电路
概述: CN2628是一款可用太阳能供电的低噪声线性电压调制集成电路,采用固定5.0V输出电压,最大 输出电流可达1安培,在5.5V到7V的输入电压范围内输出电压精度可达1%。CN2628工作电流只有520微安,而且同输入和输出的压差没有关系。 CN…...
Claw框架数据库迁移工具claw-migrate:原理、实践与团队协作指南
1. 项目概述:一个专为Claw设计的迁移工具最近在折腾一个叫Claw的开源项目,它本身是一个轻量级的Web框架,用起来挺顺手。但项目迭代过程中,难免会遇到数据库结构变更、数据迁移这类“脏活累活”。手动写SQL脚本?太原始&…...
