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_类
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()方法在显式调用该方法之前不会启动?当然,很容易修复,修改为仅在启动时创建流程。太棒了!谢谢还感谢所有回答问题的人