启动子进程并保存到don时终止

2024-09-29 23:18:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我做了一个课程,开始一些程序,当我做了一些事情的时候就杀了。 但它似乎在附近徘徊。它有一个setup和teardown函数以及用于存储进程的变量。你知道吗

我现在不关心标准和标准。我只是觉得我需要把它包括进去。你知道吗

class ServerClient(object):

    def __init__(self):
        self.server_process = None
        self.client_process = None

    def setUp(self):
        self.server_process = subprocess.Popen(
                ['python', 'servlet.py'],
                stdout=subprocess.PIPE,
                stderr=subprocess.STDOUT,
        )
        self.client_process = subprocess.Popen(
                ['python', 'client.py'],
                stdout=subprocess.PIPE,
                stderr=subprocess.STDOUT,
        )
        time.sleep(2)

    def tearDown(self):
        if self.server_process is not None:
            try:
                print "Killing Server"
                self.server_process.terminate()
                self.server_process.wait()
            except OSError:
                pass
            self.server_process = None
        if self.client_process is not None:
            try:
                print "Killing Client"
                self.client_process.terminate()
                self.client_process.wait()
            except OSError:
                pass
            self.client_process = None

if __name__ == '__main__':
    sc = ServerClient()
    sc.setUp()
    # Do stuff
    sc.tearDown()

Tags: pyselfclientnone标准ifserverdef
1条回答
网友
1楼 · 发布于 2024-09-29 23:18:35

(在POSIX OS上)terminate()向进程发送SIGTERM。试试看

import os
import signal

os.kill(self.server_process.pid, signal.SIGTERM)
os.kill(self.server_process.pid, signal.SIGTERM)

如果希望服务器或客户机生成进程,则必须以不同方式调用Popen并使用操作系统killpg. 你知道吗

self.server_process = subprocess.Popen(
    ['python', 'server.py'],
    stdout=subprocess.PIPE,
    stderr=subprocess.STDOUT,
    preexec_fn=os.setpgrp
)

os.killpg(os.getpgid(self.server_process.pid), signal.SIGTERM) 

相关问题 更多 >

    热门问题