linux进程终止过程,终止以开始的进程及其子进程子流程.popen正确的方法(windows和linux)...

我正在为一些我用Popen启动的进程而挣扎,这些进程启动了子进程。当我在终端中手动启动这些进程时,如果发送CTRL+C,每个进程都会按预期终止子流程.Popen任何终止进程的尝试都只会删除父进程,而不会删除其子进程。在

我尝试了.terminate()..kill()以及..send_signal()信号。信号中断, signal.SIGTERM信号,但在任何情况下我都会终止父进程。在

通过这个父进程,我可以重现错误行为:#!/usr/bin/python

import time

import sys

import os

import subprocess

import signal

if __name__ == "__main__":

print os.getpid(), "MAIN: start a process.."

p = subprocess.Popen([sys.executable, 'process_to_shutdown.py'])

print os.getpid(), "MAIN: started process", p.pid

time.sleep(2)

print os.getpid(), "MAIN: kill the process"

# these just terminate the parent:

#p.terminate()

#p.kill()

#os.kill(p.pid, signal.SIGINT)

#os.kill(p.pid, signal.SIGTERM)

os.kill(p.pid, signal.SIGABRT)

p.wait()

print os.getpid(), "MAIN: job done - ciao"

现实生活中的儿童过程是管理.py从Django生成一些子进程并等待CRTL-C。但是下面的示例似乎也可以工作:

^{pr2}$

因此,我的问题是:如何在第一个示例中杀死进程,并同时删除子进程?在windows上os.杀死(p.pid,signal.CTRL\u\u事件)在某些情况下似乎是有效的,但是正确的方法是什么?终端是怎么做到的呢?在

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值