首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >子进程杀伤子进程,但不杀伤子进程衍生的进程

子进程杀伤子进程,但不杀伤子进程衍生的进程
EN

Stack Overflow用户
提问于 2014-01-13 10:05:27
回答 1查看 2.7K关注 0票数 6

我一直有一个问题,我可以杀死产生节点的进程,但节点不会被杀死。有没有人建议我怎么做?

我最近一些失败的尝试是:

代码语言:javascript
复制
node.terminate()

代码语言:javascript
复制
node.send_signal(signal.SIGINT)

代码如下:

代码语言:javascript
复制
from subprocess import Popen
import json
import sys
import os
import signal
import requests

FNULL = open(os.devnull, 'w')

json_data = open('nodes.json', 'r').read()
data = json.loads(json_data)

port = data['port']

# launch hub
hub = Popen('java -jar selenium-server-standalone-2.37.0.jar -role hub -port %s' % port, stdout=FNULL, stderr=FNULL, shell=True)

#launch nodes
nodes = []
for node in data['nodes']:
    options = ''
    if node['name'] == 'CHROME':
        options += '-Dwebdriver.chrome.driver=../grid/chromedriver '
    #options += ' -browser browserName='+node['name']+' maxInstances='+str(node['maxInstances'])
    nodes.append(Popen('java -jar selenium-server-standalone-2.37.0.jar -role node -hub http://localhost:%i/grid/register %s' % (port, options), stdout=FNULL, stderr=FNULL, shell=True))

# wait for user input
print "type 'q' and ENTER to close the grid:"
while True:
    line = sys.stdin.readline()
    if line == 'q\n':
        break

# close nodes
for node in nodes:
    #node.terminate()
    node.send_signal(signal.SIGINT)

# close hub   
r = requests.get('http://localhost:'+str(port)+'/lifecycle-manager?action=shutdown')

据我所知,我基本上被迫使用shell=True来重定向到工作,在父python进程中处理子进程的stdout/stderr是不可行的,因为我找不到以非等待的方式完成这项工作的功能(并且父python进程必须在子进程运行时做其他事情)。

代码语言:javascript
复制
# close nodes
for node in nodes:
    node.send_signal(signal.SIGINT)
    node.terminate()    

这似乎会杀死除1个节点之外的所有进程。并不总是同一个

EN

回答 1

Stack Overflow用户

发布于 2014-03-25 21:20:19

您可以尝试使用os.killpg。此函数将信号发送到进程组,如果您的进程不更改进程组,它应该可以工作。

代码语言:javascript
复制
import os
import signal

os.killpg(os.getpgid(pid), signal.SIGINT)

请注意,如果您在shell下创建进程(bash、zsh等),进程组将会更改,在这种情况下,应该使用更复杂的技术。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21082842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档