我需要能够从另一个进程中杀死一个python进程。这是我现在如何做的一个例子:
在“主要”过程中:
# Write the ProcessID to tmp file
with open('/tmp/%s' % self.query_identifier, 'w') as f:
f.write(str(os.getpid()))
try:
cursor.execute('''very long query''')
except Exception:
do_some_other_stuff()
raise ConnectionError("There was an error completing this process")
在另一个“杀死”该过程的过程中,我有:
pid = int(open('/tmp/%s' % self.query_identifier).read())
os.kill(pid, signal.SIGKILL)
这很好。但是,这完全终止了python进程,因此它永远不会到达except
代码块。什么是做上述更好的方法?例如,这样我就可以在不终止python程序的情况下从另一个单独的进程执行“ kill”操作。
答案 0 :(得分:2)
工人程序:
import signal
# Define and register a signal handler
def handler(signum, frame):
raise IOError("Quitting on {}".format(signum))
signal.signal(signal.SIGINT, handler)
try:
while(True): # Imitate a long and winding road
pass
except IOError:
print("I've been killed!")
主管程序:
import os, signal
os.kill(pid, signal.SIGINT)