以下は、いくつかのスレッドにまたがる 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 で上記のプログラムを実行すると、アプリケーションが終了して新しいプロセスが生成された後でも、プロセスが実行され続けることがわかります。スレッドが stdout に出力し続けるため、これが表示されます。行をコメントアウトしてもdaemon
、プロセスは引き続き実行されます。
が呼び出された後もプロセスが実行され続けるのはなぜですか? また、プロセスsys.exit()
を停止するにはどうすればよいですか? この問題は、Kubuntu Linux 12.10 の Python 2.7 および Python 3.2 で発生します。