#! /usr/bin/env python import os import threading import signal def f(n): # 子プロセス用関数(遅い素数判定) p=2 while p<n: if not [x for x in range(2,p) if p%x<1]: print p p += 1 def kill(pid): # プロセスidが pid のプロセスを終了させる関数 os.kill(pid, signal.SIGKILL) print 'killed pid-%s'%pid pid = os.fork() # ここから処理が2通りに分かれて、子プロセスにはpid==0が、親プロセスにはpid==(子プロセスのpid)が代入される if pid == 0: f(3500) else: threading.Timer(3.0, kill, (pid,)).start() # タイマー設定で、3.0秒後にkill(pid)が呼び出される。 os.wait() # 子プロセスの終了を待つ。 os._exit(0) # もし、タイマーの時間より早く、子プロセスが終了すれば、何も無く終了
- もっといい方法があるかもしれません -- (kt3k) 2007-11-27 07:23:50
- signal.SIGKILLは単に、intの9らしいので、それを使えば、import signalは多分不要とおもいます -- (kt3k) 2007-11-27 10:21:36