Pythonで学ぶ「詳解 UNIXプログラミング」(その9) 第9章 プロセスの関係
9.1 オーファンドプロセスグループの作成
import sys, os, time, signal, traceback def pr_ids(name): print "{0} pid={1} ppid={2} pgrp={3}".format( name, os.getpid(), os.getppid(), os.getpgrp()) def sig_hup(signum, frame): print "SIGHUP received, pid={0}".format(os.getpid()) pr_ids("parent") pid = os.fork() if pid: # parent time.sleep(5) print "parent finish" sys.exit(0) else: # child pr_ids("child") signal.signal(signal.SIGHUP, sig_hup) os.kill(os.getpid(), signal.SIGSTOP) pr_ids("child") time.sleep(1) try: os.read(0, 1) except: traceback.print_exc()
手元の環境では、os.read()
の前にtime.sleep()
を入れないと解説通りの動作とはならず、普通に端末からの読み込み待ちとなった。time.sleep()
なしだと、オーファンドバックグラウンドプロセスグループに移行する前に端末からの読み込みを開始してしまうのだろう。