#! /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