python杀死线程的方法_多线程 – 防止线程subprocess.popen在子被杀死时终止我的主脚本?...

Solaris 10上的

Python 2.7.3

问题

>当我的子进程有内部分段错误(核心)问题或用户使用SIGTERM或SIGKILL从shell外部杀死它时,我的主程序的信号处理程序处理SIGTERM(-15)并且我的父程序退出.这是真的吗?还是一个糟糕的python构建?

背景和代码

我有一个python脚本,首先产生一个工人管理线程.然后,工作线程管理线程生成一个或多个工作线程.我的主线程中还有其他一些我无法阻止的东西.我的管理线程和工作线程是坚如磐石的.我的服务运行多年没有重启但后来我们有这个subprocess.Popen场景:

在工作线程的run方法中,我使用:

class workerThread(threading.Thread):

def __init__(self) :

super(workerThread, self).__init__()

...

def run(self)

...

atempfile = tempfile.NamedTempFile(delete=False)

myprocess = subprocess.Popen( ['third-party-cmd', 'with', 'arguments'], shell=False, stdin=subprocess.PIPE, stdout=atempfile, stderr=subprocess.STDOUT,close_fds=True)

...

我需要使用myprocess.poll()检查进程终止,因为我需要扫描atempfile,直到找到相关信息(文件可能是> 1 GiB)并且我需要因用户请求或因为过程已经运行太久了.一旦找到我要找的东西,我就会停止检查stdout临时文件.我将在外部进程停止并且工作线程终止之前将其清理干净.我需要stdin PIPE,以防我需要在子节点的stdin流中注入一些交互式的响应.

在我的主程序中,如果我的主python程序使用SIGTERM或SIGINT(Ctrl-C)终止(如果从shell运行),我为我设置一个SIGINT和SIGTERM处理程序来执行清理.

有没有人有一个坚实的2.x配方用于线程中的子信号处理?

ctypes sigprocmask等

任何帮助将非常感激.我只是在寻找一个“官方”配方或最好的黑客,如果一个甚至存在.

笔记

我正在使用受限制的Python构建.我必须使用2.7.3.第三方cmd是我没有源代码的程序 – 修改它是不可能的.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值