当前位置: 首页 > news >正文

扬州网站建设沧州网站优化公司

扬州网站建设,沧州网站优化公司,医疗手机网站模板,嘉兴做网站优化python处理僵尸进程当你使用ps -ef 查看系统进程时,如果发现了带有defunct字样的进程信息时,恭喜你,你成功的制造了僵尸进程。僵尸进程产生的原因是,子进程已经退出了,但是父进程还在运行,可是父进程并没有…

python处理僵尸进程

当你使用ps -ef 查看系统进程时,如果发现了带有defunct字样的进程信息时,恭喜你,你成功的制造了僵尸进程。僵尸进程产生的原因是,子进程已经退出了,但是父进程还在运行,可是父进程并没有对子进程进行回收,这就导致子进程一直存在,对资源是一种浪费,如果僵尸进程过多,系统性能会下降。在python项目里,如果不能正确的使用subprocess模块的Popen类,就很容易产生僵尸进程。

1. 什么情况下产生僵尸进程?

1.1 父进程先退出

父进程先退出,子进程还在运行,这时,子进程被init收养,当子进程结束后,init负责对子进程的资源进行回收,这种情况下,不会产生僵尸进程

1.2 子进程先退出,父进程进行wait()操作

父进程在启动子进程后,执行wait(),子进程退出后,这个wait()操作就负责回收子进程,这样也不会产生僵尸进程。但这样做有个致命的问题,wait是阻塞的,如果进行wait,主进程就什么都做不了。

1.3 子进程先退出,父进程不进行wait()操作

这种情况,百分百会产生僵尸进程,直到父进程退出,僵尸进程由init收养,init负责执行wait()处理。

2. 如何避免产生僵尸进程

2.1 fork两次

第一次fork,父进程wait 子进程

第二次fork, 子进程产生孙子进程后退出,由父进程回收

孙子进程刚产生,它的父亲就退出了,成了孤儿进程,由init收养

这样,通过两次fork,就避免了僵尸进程的产生

2.2 使用signal(SIGCHLD, SIG_IGN)

子进程在退出时,会向父进程发送SIGCHLD信号,SIG_IGN 是忽略的意思,在python代码里加入这样一段

import signal

signal.signal(signal.SIGCHLD, signal.SIG_IGN)

这段代码通知内核,自己对子进程的退出不关心,让内核来回收,这个方法看起来十分简单,但是并不是在所有系统上都有效,在mac和linux系统下,这种方法是可行的,其他的系统我没有试验,强调一点,在docker环境下,init进程其实是docker主程序的进程,因此在docker里,即便是linux系统这种方法也不行。

2.3 在signal handler中调用 waitpid

为SIGCHLD信号注册一个处理方法,当子进程退出后,使用waitpid来处理子进程的退出,如此处理,父进程不会发生阻塞

test.py

import errno

import time

import sys

import os

import signal

from subprocess import Popen

def wait_child(signum, frame):

try:

while True:

childpid, status = os.waitpid(-1, os.WNOHANG)

if childpid == 0:

print('没有立即可用的子进程')

break

exitcode = status >> 8

print('子进程 %s 退出,状态码是 exitcode %s' % childpid, exitcode)

except OSError as e:

if e.errno == errno.ECHILD:

print("没有需要等待wait的子进程")

else:

raise

signal.signal(signal.SIGCHLD, wait_child)

Popen([sys.executable, './app.py'])

for i in range(10):

time.sleep(5)

app.py

import time

for i in range(3):

print(i)

time.sleep(5)

执行test.py 脚本后,会通过子进程执行app.py, app.py会先结束,结束时会发送signal.SIGCHLD给父进程test.py, 在test.py中对信号进行处理。这里对os.waitpid(-1, os.WNOHANG) 进行解释

-1 表示任意子进程

os.WNOHANG 表示如果没有需要wait的子进程,则waitpid方法立即返回

http://www.lbrq.cn/news/2650519.html

相关文章:

  • 南昌市卫健委最新发布跟我学seo
  • 网站建设要注意那些问题社会化媒体营销
  • wordpress付费阅读主题优化seo深圳
  • 电子商务基础平台有哪些北京seo推广优化
  • 政府三级网站制度建设百度下载免费安装到桌面
  • 自己做销售独立网站抖音关键词优化排名
  • 笔记本做网站在线网页制作工具
  • 帮别人做彩票网站犯法嘛百度云搜索引擎官网入口
  • 麻城做网站百度知道问答
  • 深圳优化公司样高粱seo充电宝seo关键词优化
  • 杭州网站建设多少钱虎门今日头条新闻
  • web2.0 网站模板南宁seo外包平台
  • 七宝做网站seo搜索引擎优化培训班
  • wordpress同步到本地外贸网站seo教程
  • 如何完整保存网站并做修改一般网站推广要多少钱
  • 网站蜘蛛屏蔽怎样恢复数据分析网站
  • 商丘网站建设的公司哪家好文案写作软件app
  • 专业集团门户网站建设线上推广平台都有哪些
  • 青龙县建设局网站信阳seo推广
  • 杭州手机网站建设公司 网络服务媒体发稿公司
  • 石家庄做网站公司的电话网站推广该怎么做
  • 做私活 网站百度健康人工客服电话24小时
  • 舟山建设银行纪念币预约网站免费招聘信息发布平台
  • 网站程序代码优化引流软件有哪些
  • seo做的最好的网站排行朝阳网站建设
  • 网站推广营销应该怎么做seo免费系统
  • 用eclipse做jsp网站东莞seo排名收费
  • 顺德网站建设要多少钱baidu百度首页官网
  • 西安最好的网站建设公司我想做个网站怎么做
  • dede 中英文网站站长seo综合查询
  • uni-app 网络请求终极选型:uni.request、axios、uni-network、alova 谁才是你的真命请求库?
  • C++11中的移动语义
  • GPT-5:数字大脑的进化史
  • B4263 [GESP202503 四级] 荒地开垦 题解
  • 如何将 Vue 前端、Hardhat 合约和 Node.js 后端集成到一个项目中
  • 使用Prometheus + Grafana + node_exporter实现Linux服务器性能监控