【发布时间】:2014-10-13 16:58:57
【问题描述】:
我有这个代码:
class Server(object):
servers = []
def __init__(self, name, host, port, process):
self.name = name.lower()
self.host, self.port = host, port
self.process = process
self.pid = self.process.pid
@staticmethod
def register(server):
Server.servers.append(server)
@staticmethod
def unregister(server):
Server.servers.remove(server)
def start_waitress(host='0.0.0.0', port=8080):
args = ['--port={}'.format(port),
'--host={}'.format(host), 'yarr.wsgi:application']
subprocess.call(['waitress-serve'] + args)
...
host, port = '0.0.0.0', 8080
process = multiprocessing.Process(target=start_waitress)
process.start()
Server.register(Server('waitress', host, port, process))
...
for server in Server.servers:
if server.name == 'waitress':
server.process.terminate() # Here's the problem
Server.unregister(server)
break
问题是我无法在启动后终止进程。
我可以终止进程的唯一方法是运行kill <pid>。
如何终止该进程?
【问题讨论】:
-
waitress-serve可能会自己守护进程(父进程已经退出,没有什么可以杀死的)。使用意味着waitress-serve提供关闭其守护进程。 -
@J.F.Sebastian 有办法检查吗?
-
您可以看到
server.pid在process.start()之后几乎没有立即运行。
标签: python subprocess python-multiprocessing