代码示例支持

平台: Centos 6.3

Python: 2.7.14

1.1 踩坑案例

pid, ppid是大家比较常见的术语, 代表进程号,父进程号. 但pgid是个什么鬼?

了解pgid之前, 我们先复习下:

进程篇其一

里面场景是: 一个进程通过os.system或者Popen家族启动子进程

后通过杀死父进程的方式无法杀死它的连带子进程

我们通过其他方式进行了解决

这个场景还有个后续就是:

如果这个子进程还有孙子怎么办?

它还有孙子的孙子怎么办?

这个就是今天我们遇到的坑, 怎么处理孙子进程. 大家注意, 不仅是Python会遇到这个问题, 其他语言包括 Shell 都一样会遇到这种"孙子"进程怎么进程异常处理的问题.

1.2 填坑解法

本期的坑位解法其实有两种, 第一种比较暴力, 简称穷尽搜索孙子法.

a. 穷尽搜索孙子法, 代码示例

关键点:

使用cup.res.linux中的Process类, 获得该进程所有的子孙进程

使用kill方法全部杀死

from cup.res import linux

pstatus = linux.Process(pid)

for child in pstatus.children(recursive=True):

os.kill(child, signal.SIGKILL)

b. 获得该进程的 PGID, 进行 kill 操作

b1. 先讲个 shell 操作的做法, 使用ps 获取进程的pgid, 注意不是pid

# 以mysqld为例, 注意 pgid 项

ps -e -o uid,pid,gid,pgid,cmd|grep mysql

结果:

注意其中第三列, 该进程和子进程都使用了同样的pgid 9779

9790 0 9779 /bin/sh /usr/bin/mysqld_safe --datadir=/home/maguannan/mysql/mysql/....

10171 501 9779 /home/maguannan/bin/mysqld --basedir=/home/maguannan/mysql/....

通过kill -9 -9779的方式可以杀死该pgid底下的所有子孙进程

b2. 在讲 Python 里的处理方式

import os

import signal

from cup.res import linux

pstatus = linux.Process(pid)

os.killpg(pstatus.getpgid(), signal.SIGKILL)

1.3 坑位分析

进程组特性

a. 在*unix 编程中, 进程组(man getpgid)概念是个很重要但容易被忽略的内容

进程组ID (pgid) 标记了一系列相关的进程

进程组有一个组长进程, 一般组长进程 ID 等于进程组 ID

进程组只要任一进程存在, 进程组就存在. 进程组存在与否与组长死活无关

可以通过setpgid方式设置一个进程 pgid

一个进程只能为自己或者子进程设置进程组 id

子进程一旦执行了exec函数, 它就不能改变子进程的进程组 id

b. 进程组内的所有成员会收到来自相同的信号

引用 wikipedia 原文:

a process group is used to control the distribution of a signal; when a signal is directed to a process group, the signal is delivered to each process that is a member of the group.

坑位解决

由于进程组拥有以上的特性, 进程组内的进程可以被当做相同的处理单元

默认子进程与父进程拥有同样的进程组

组内每个进程收到相同的信号)

使用kill发送信号 SIGKILL 即可满足杀死所有子孙进程的目的

1.4.1 技术关键字

pgid 进程组

pid, ppid 进程ID, 父进程ID

下期坑位预告

踩坑之旅进程篇其四: 一次性踩透uid, euid, gid, egid的坑坑洼洼

Python 踩坑之旅文件系统篇其一文件夹也是个文件

目录 1.1 案例 1.2 分析 1.3 扩展 1.4 技术关键字 下期预告 代码示例支持 平台: Mac OS Python: 2.7.10 代码示例: - wx: 菜单 - Python踩坑指南代 ...

Python踩坑之旅其一杀不死的Shell子进程

目录 1.1 踩坑案例 1.2 填坑解法 1.3 坑位分析 1.4 坑后扩展 1.4.1 扩展知识 1.4.1 技术关键字 1.5 填坑总结 1.1 踩坑案例 踩坑的程序是个常驻的Agent类管理进程 ...

[代码修订版] Python 踩坑之旅 [进程篇其四] 踩透 uid euid suid gid egid sgid的坑坑洼洼

目录 1.1 踩坑案例 1.2 填坑解法 1.3 坑位分析 1.4 技术关键字 1.5 坑后思考 下期坑位预告 代码示例支持 平台: Centos 6.3 Python: 2.7.14 代码示例: 公 ...

Python 踩坑之旅进程篇其四一次性踩透 uid euid suid gid egid sgid的坑坑洼洼

目录 1.1 踩坑案例 1.2 填坑解法 1.3 坑位分析 1.4 技术关键字 1.5 坑后思考 下期坑位预告 代码示例支持 平台: Centos 6.3 Python: 2.7.14 代码示例: 菜 ...

[代码修订版] Python 踩坑之旅进程篇其五打不开的文件

目录 1.1 踩坑案例 1.2 填坑和分析 1.2.1 从程序优化入手 1.2.2 从资源软硬限入手 1.4.1 技术关键字 下期坑位预告 代码示例支持 平台: Centos 6.3 Python: ...

Python踩坑之旅其二裸用os.system的原罪

目录 1.1 踩坑案例 1.2 填坑解法 1.3 坑位分析 1.4.1 技术关键字 1.5 填坑总结 2. 前坑回顾 2.1 Linux中, 子进程拷贝父进程哪些信息 2.2 Agent常驻进程选择& ...

美团热修复Robust的踩坑之旅-使用篇

最近需要在项目中使用热修复框架,在这里以美团的Robust为主写一篇文章总结一下学习的过程. 一直认为要学习一个框架的原理,首先需要让他跑起来,从效果反推回去,这样更容易理解. 一.美团Robust的 ...

vue+ vue-router + webpack 踩坑之旅

说是踩坑之旅 其实是最近在思考一些问题 然后想实现方案的时候,就慢慢的查到这些方案   老司机可以忽略下面的内容了 1)起因  考虑到数据分离的问题  因为server是express搭的   自然少 ...

微信小程序之mpvue+iview踩坑之旅

因为之前参照微信的原生的文档写过一些小程序的demo,写的过程比较繁琐,后来出了美团的mpvue,可以直接使用vue开发,其他的不作对比,这篇文章记录一下踩坑之旅. 参照mpvue http://mp ...

随机推荐

让 ASP.NET vNext 在 Mac OS 中飞呀飞。。。

写在前面 阅读目录: 娓娓道来 Install ASP.NET vNext Command Line Tools 安装 Homebrew 使用 Homebrew,安装 KVM Install Subl ...

Linux虚拟机中配置JDK环境变量

前提准备: 1,安装好Linux系统 2,下载好可以将文件传输到Linux系统工具例如:WinSCP 3,在windows中下载Linux版JDK: http://download.oracle.co ...

Control.DataBinding数据绑定简单用法:

DataBindings的用法: 第一个值:要绑定到TextBox的什么地方 第二个值:数据源是什么 第三个值:应该取数据源的什么属性 第四个值:是否开启数据格式化 第五个值:在什么时候启用数据源绑定 ...

将你的代码上传 Bintray 仓库

在 Android Studio 中,我们通常可以利用 gradle 来导入别人写的第三方库,通常可以简单得使用一句话就能搞定整个导包过程, 比如: compile 'net.cpacm.moneyt ...

传输层:TCP UDP SCTP

总图 虽然协议族被称为“TCP/IP”,但除了TCP和IP这两个主要协议外,还有许多其他成员.图2-1展示了这些协议的概况. 图2-1中同时展示了IPV4和IPV6.从右向左看该图,最右边的5个网络应 ...

logstash 安装WARNING: SSLSocket#session= is not supported

logstash官方提供的插件安装方法是: bin/plugin install logstash-output-webhdfs按照此方法,不出意料肯定会出现以下错误: [ec2-user@ip-xx ...

真机测试---iOS证书(.p12)和描述文件(.mobileprovision)

iOS证书和描述文件: 证书类型 使用场景 开发(Development)证书和描述文件 用于开发测试,在starain中打包后可在真机环境通过Safari调试 发布(Distribution)证书和 ...

抽象工厂模式(Java与Kotlin版)

前文推送 设计模式 简单工厂模式(Java与Kotlin版) 工厂方法模式(Java与Kotlin版) Kotlin基础知识 Kotlin入门第一课:从对比Java开始 Kotlin入门第二课:集合操 ...

JS原生Ajax&Jquery的Ajax技术&Json

1.介绍Ajax Ajax = 异步 JavaScript 和 XML Ajax是一种创建快速动态网页的技术 通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新.这意味着可以不用整个 ...

关于wooyun-2015-096990的总结

漏洞url:http://wooyun.jozxing.cc/static/bugs/wooyun-2015-096990.html 摘要 if(!ini_get('register_globals' ...

python 同花顺thstrader_Python 踩坑之旅进程篇其三pgid是个什么鬼 (子进程\子孙进程无法kill 退出的解法)...相关推荐

  1. python 同花顺thstrader_Easytrader踩坑记(一)

    报着学习的态度,打算将Easytrader的源码过一遍,所以今天(正月十五)开始折腾Easytrader,第一次使用,坑还真的挺多的. 一.关于QQ群 官方也有一个QQ群,要花50元才能入群,我入了群 ...

  2. Vue踩坑之旅(一)—— 数组、对象的监听

    作为一个接触 vue 才一个多月的小白,马上就接手基于 vue 的大型商城项目,其间真是跌跌撞撞踩了好多坑(o(╥﹏╥)o).在此写下自己的踩坑之旅,希望给跟我一样还在自学 vue 的同学一些帮助,另 ...

  3. (Python+Tensorflow)编程踩坑集锦

    (Python+Tensorflow)编程踩坑集锦 1 开发环境安装 推荐视频:https://www.icourse163.org/learn/PKU-1002536002?tid=14529374 ...

  4. 微信开发踩坑之旅 之 开发准备及服务器配置

    在工作和兴趣的机缘巧合之下,我开始接触微信开发.在这里简单记述自己的微信开发踩坑之旅. 首先,由于本人标准的理工科生,记述的语言有所不足,我尽量说明准确和详细点. 本文记述主线 ·申请公众号 ·公众号 ...

  5. VR制作中必须踩的坑365之037(oculus2、UE4、UE5、VR记录一年的踩坑之旅)Maya / ZBrush / Substance Painter倒来倒去

    VR制作中必须踩的坑365之037(oculus2.UE4.UE5.VR记录一年的踩坑之旅)Full 3D GAME ASSET workflow ( Maya / ZBrush / Substanc ...

  6. 重装win10系统+Ubuntu16.04的踩坑之旅(联想拯救者r720)

    重装win10系统+Ubuntu16.04的踩坑之旅(联想拯救者r720) 碎碎念:原本双系统用得很开心的,在手贱删了Ubuntu系统的某些隐藏文件之后导致Ubuntu系统不能正常使用,在某种程度强迫 ...

  7. VR制作中必须踩的坑365之044(oculus2、UE4、UE5、VR记录一年的踩坑之旅)拳击VR小游戏红绿灯

    VR制作中必须踩的坑365之043(oculus2.UE4.UE5.VR记录一年的踩坑之旅)拳击VR制作起来,拳击动画人物 How to create box minigame in VR (UE4 ...

  8. VR制作中必须踩的坑365之045(oculus2、UE4、UE5、VR记录一年的踩坑之旅)iclone8来来来告诉你剁手坑

    VR制作中必须踩的坑365之045(oculus2.UE4.UE5.VR记录一年的踩坑之旅) iClone 8 Work in Progress - Part One: Dramatically Si ...

  9. Android google翻译踩坑之旅

    # Android google翻译踩坑之旅   最近由于工作需求,需要为游戏Android平台接入Google翻译的SDK,由于关于翻译的文章非常少,访问官方文档又需要翻墙,更可气的是找到的博客写了 ...

最新文章

  1. #113. 【UER #2】手机的生产
  2. Metasploit设置VERBOSE参数技巧
  3. CTF(pwn)攻防世界warmup
  4. 让用户故事真的像故事那样
  5. 如何备份服务器日志到其他服务器_sql2008自动备份到ftp服务器,sql2008自动备份到ftp服务器代码公布...
  6. 2021年中国带LED显示屏的温度调节器市场趋势报告、技术动态创新及2027年市场预测
  7. nodejs libararies
  8. Arcgis Javascript那些事儿(六)--arcgis js API本地环境配置
  9. 最棒的 JavaScript 学习指南
  10. 揭秘Spring——《Spring 揭秘》读书笔记纲要
  11. 用SPSS做数据分析(1)
  12. 推荐几个 Go 圈子的高质量肝帝
  13. LQ0266 巧排扑克牌【模拟】
  14. 计算机在不操作的时候自动黑屏,电脑长时间不操作黑屏怎么办
  15. 自定义变量的一个有趣案例
  16. 外包程序员的水平真的很垃圾吗?
  17. java 识别doc、docx
  18. Chrome浏览器安装Vue.js devtools插件
  19. Spring学习(五)—— 自动装配
  20. 30天搞定spark源码系列-RDD番外篇-shuffledRDD

热门文章

  1. 30个 DotNet网站
  2. DOM节点属性 attr,removeAttr,addClass,HTML,text
  3. 【认识】wireshark使用教程
  4. 什么是SqlSession
  5. 一个公式教你背会 矩形波导或圆波导(或者矩形或圆形谐振腔)以纵向分量为领矢得到全部的场表达式
  6. 又是新的一年,做一个新的新年计划!
  7. 互联网首席工程师 - 全栈,懂后端的精英前端工程师
  8. Verdi UVM Debug Mode 简单使用
  9. Anchor-free
  10. DSP中断介绍及其应用