2019独角兽企业重金招聘Python工程师标准>>>

前几天发现服务器上有几个zombie进程,搜索了一下(ps -ef | grep defunct),僵尸进程的父进程是以前写的python同步脚本。

仔细看了下代码,发现在这:

sub = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
# other codes

对,父进程开启了子进程后,并无任何动作,子进程执行完成后成为一个僵尸进程。

解决方法很简单,父进程wait子进程即可,但因为标准输出和标准错误输出是管道方式(PIPE),直接使用wait()有可能会导致管道堵塞,python官方文档亦有以下叙述:

WarningThis will deadlock when using stdout=PIPE and/or stderr=PIPE and the child process generates enough output to a pipe such that it blocks waiting for the OS pipe buffer to accept more data. Use communicate() to avoid that.

官方建议适用communicate方法,于是修改代码如下:

sub = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
out, err = sub.communicate()

另外一种修改方式,适用于不关心子进程返回结果的场景,可以将STDOUT和STDERR输出结果定向到/dev/dull去,再调用wait()即可,如下:

sub = subprocess.Popen(cmd, shell=True, stdout=open("/dev/null", "w"), stderr=subprocess.STDOUT)
sub.wait()

因为需要子进程的处理信息,选用了第一种方法。重新启动python脚本,不再出现僵尸进程的问题了。

转载于:https://my.oschina.net/catandpaperball/blog/477184

python subprocess使用记录相关推荐

  1. Python 库的记录

    GitHub - jobbole/awesome-python-cn: Python资源大全中文版,内容包括:Web框架.网络爬虫.网络内容提取.模板引擎.数据库.数据可视化.图片处理.文本处理.自然 ...

  2. python popen阻塞_对Python subprocess.Popen子进程管道阻塞详解

    问题产生描述 使用子进程处理一个大的日志文件,并对文件进行分析查询,需要等待子进程执行的输出结果,进行下一步处理. 出问题的代码 # 启用子进程执行外部shell命令 def __subprocess ...

  3. python subprocess库 终端命令行命令

    python subprocess subprocess 模块允许我们启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值. 具体看官方文档 https://docs.python.or ...

  4. Python 装饰器记录总结 (终极版)

    Python 装饰器记录总结 (终极版) 原文链接:http://magicroc.com/2017/04/10/Python装饰器记录总结/ 装饰器是一个函数,一个用来包装函数的函数,装饰器在函数申 ...

  5. python 程序耗时记录_Python学校的学生身高记录程序

    python 程序耗时记录 A team of 5 people is assigned with a task to record the heights of students in a scho ...

  6. Python: subprocess.Popen()不支持unicode问题解决

    Python: subprocess.Popen()不支持unicode问题解决 参考文章: (1)Python: subprocess.Popen()不支持unicode问题解决 (2)https: ...

  7. Python常见问题解决记录1-Non-ASCII character ‘\xe7‘错误

    Python常见问题解决记录1-Non-ASCII character '\xe7'错误 参考文章: (1)Python常见问题解决记录1-Non-ASCII character '\xe7'错误 ( ...

  8. python subprocess pipe_python类库31[进程subprocess与管道pipe]

    修改自: 原文 : Working with Python subprocess - Shells, Processes, Streams, Pipes, Redirects and More 一 程 ...

  9. Python Subprocess Popen 管道阻塞问题分析解决

    Python Subprocess Popen 管道阻塞问题分析解决 参考文章: (1)Python Subprocess Popen 管道阻塞问题分析解决 (2)https://www.cnblog ...

最新文章

  1. HK-2000 数采仪 航空头接口定义
  2. flex+hibernate 中java的pojo与as的pojo的映射问题
  3. C++string类常用函数
  4. P2467-[SDOI2010]地精部落【dp】
  5. 两个摄像头合成一路_教你把一个摄像机添加到两台录像机
  6. “头腾大战”烧至在线办公:微信封禁飞书做错了吗?
  7. js 对象及空对象或数组及空数组的判断与比较
  8. final关键字深入解析
  9. topjui中combobox使用
  10. springboot启动自动停止
  11. 使用python语解决一个小学数学题----鸡兔同笼问题
  12. 安徽大学计算机考研经验贴
  13. 2019游戏 f1_F1 2019
  14. 大数据的概念、特点及应用场景
  15. yuv 格式之 Semi Planar和Planar
  16. svn多分支合并主干冲突 svn Working copy and merge source not ready for reintegration
  17. Linux下empress数据库,Linux命令compress使用“Lempress-Ziv”编码压缩数据文件
  18. 微信小程序开发之——mpvue开发小程序
  19. 花开不败 一个复旦女生的高三生活
  20. 数学建模:非线性规划的 Python 求解

热门文章

  1. 如何将IDEA文件提交至Gitee仓库
  2. JavaWeb(四)——在IDEA中配置Tomcat、pom文件
  3. python中进制chr_python中的chr() 如何返回字符?
  4. visionpro定位不跟随图像_机器视觉应用越来越多!不懂怎么办?在线公开课免费学...
  5. 计算机视觉与深度学习 | SLAM、视觉里程计、VIO、Net-SLAM、激光SLAM、语义SLAM、数据集( state-of-the-art)
  6. TCP协议的粘包问题(数据的无边界性)
  7. EndDialog和CDialog::OnOK()
  8. python精要(82)-wxpython(3)-静态文本控件与状态栏
  9. 【Python基础】这份 pip 使用小抄,要有全有多全(建议收藏)
  10. 【数据竞赛】从0梳理1场时间序列赛事!