如何杀死同一类中不同函数启动的子进程

时间:2014-01-11 02:54:50

标签: 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.foo_start.foo_global.kill()
        self.foo_start.foo_global.wait()


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

我该如何定义foo_stop?

2 个答案:

答案 0 :(得分:2)

我猜你想要这样的东西:

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()

我改变了一些事情:

  • 导入通常应位于文件的顶部。
  • 类应继承自object
  • 您想使用instance variable
  • 从类名开始,您的类的方法名称没有多大意义。
  • 在调用方法时,您正在创建foo_class新实例。相反,您希望创建一个实例并在其上调用方法。

答案 1 :(得分:2)

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()