下面是一个 Python 应用程序,它跨越几个线程,然后产生一个自己的新进程并退出:
from pprint import pprint import os
import random
import signal
import sys
import threading
import time
class Name(object):
def __init__(self, name):
self.name = name
class CallThreads(threading.Thread):
def __init__(self, target, *args):
self.target = target
self.args = args
threading.Thread.__init__(self)
def run (self):
self.target(*self.args)
def main(args):
print("Hello, world!")
letter = random.choice(['A', 'B', 'C', 'D', 'E', 'F'])
count = 0
while count<3:
count += 1
name = Name(letter+str(count))
t = CallThreads(provider_query, name)
t.daemon = True
t.start()
time.sleep(3)
print("------------")
print("Time to die!")
os.system('python restart.py')
sys.exit(0)
def provider_query(name):
while name.name!='':
print(name.name)
time.sleep(1)
def signal_handler(signal, frame):
sys.exit()
if __name__ == '__main__':
signal.signal(signal.SIGINT, signal_handler)
main(sys.argv)
我希望在进程退出后,与其关联的线程将停止运行。但是,在 Kubuntu Linux 上运行上述程序显示进程继续运行,即使在应用程序退出并产生了新进程之后也是如此。当线程继续输出到标准输出时,我看到了这一点。即使我注释掉该daemon
行,进程也会继续运行。
为什么进程在sys.exit()
被调用后继续运行,我怎样才能让它们停止?该问题出现在 Kubuntu Linux 12.10 中的 Python 2.7 和 Python 3.2 上。