Python 如何终止由同一类中的不同函数启动的子进程

Python 如何终止由同一类中的不同函数启动的子进程,python,subprocess,daemon,Python,Subprocess,Daemon,我想从类中的另一个函数中杀死一个进程,注意它是由另一个函数启动的。下面是一个例子: import time class foo_class: global foo_global def foo_start(self): import subprocess self.foo_global =subprocess.Popen(['a daemon service']) def foo_stop(self): self.f

我想从类中的另一个函数中杀死一个进程,注意它是由另一个函数启动的。下面是一个例子:

 import time

 class foo_class:
    global foo_global
    def foo_start(self):
        import subprocess
        self.foo_global =subprocess.Popen(['a daemon service'])

    def foo_stop(self):
        self.foo_start.foo_global.kill()
        self.foo_start.foo_global.wait()


foo_class().foo_start()
time.sleep(5)
foo_class().foo_stop()

我应该如何定义foo_stop?

我猜你想要这样的东西:

import subprocess 
import time

class foo_class(object):
    def __init__(self):
        self.foo = None

    def start(self):
        self.stop()
        self.foo = subprocess.Popen(['a daemon service'])
        self.foo.start()

    def stop(self):
        if self.foo:
            self.foo.kill()
            self.foo.wait()
            self.foo = None


foo = foo_class()
foo.start()
time.sleep(5)
foo.stop()
我改变了一些事情:

  • 导入通常应该放在文件的顶部
  • 类应该从
    对象继承
  • 你想用一个
  • 类的方法名以类名开头没有多大意义
  • 调用其方法时,您正在创建
    foo_类
    新实例。相反,您希望创建一个实例并对其调用方法

jterrace代码有效。如果您不想在初始化时启动它,只需在单独的函数中调用Popen,并且不向init函数传递任何内容

import subprocess 
import time

class foo_class(object):
    def __init__(self):
        pass

    def start(self):
        self.foo = subprocess.Popen(['a daemon service'])

    def stop(self):
        self.foo.kill()
        self.foo.wait() #don't know if this is necessary?

    def restart(self):
        self.start()


foo = foo_class()
foo.start()
time.sleep(5)
foo.stop()

谢谢你,但不完全是。我想用start函数启动服务,用stop函数终止服务。这样我就可以在类init上启动进程,但我不想这样做(该类有更多的函数)。为什么不在init类中添加一个.wait()方法,这样它的self.foo=subcess.Popen(['a daemon'])。wait()方法在显式调用该方法之前不会启动?当然,很容易修复,修改为仅在启动时创建流程。太棒了!谢谢还感谢所有回答问题的人