4

subprocess.Popen を使用して複数のプロセスを実行しています。ファイルのグループのいずれかで変更を検出したら、これらのプロセスの 1 つにシグナルを送信したいと考えています。プロセスでシグナル ハンドラーを定義しましたが、シグナルが送信されていないようです。いくつかの助けをいただければ幸いです。シグナルの送信を行う関数とシグナルハンドラを以下に示します。

def start_up():
    p, i = None, None
    while 1:
        subprocess.call(['clear'])
        logging.info('starting overlay on host %s' % socket.gethostname())
        p = subprocess.Popen([sys.executable, 'sdp_proc.py'])
        i = subprocess.Popen([sys.executable, 'kernel.py', sys.argv[1],
                                 sys.argv[2]])
        if file_modified():
            p.terminate()
            i.send_signal(signal.SIGINT)
        time.sleep(1)

シグナル ハンドラを以下に示します。

def signal_handler(signum, frame):
    with open('log.txt', 'w') as f:
        f.write(' so what mate, received signal with signal number %s' % signum)


signal.signal(signal.SIGINT, signal_handler)
4

2 に答える 2

2

SIGINT は、Python のすべてをロードする前にサブプロセスに送信されていると思います。つまり、SIGINT ハンドラーをインストールする前に、すぐに終了します。

独自のハンドラー コードによって処理されると予想される SIGINT シグナルをサブプロセスに送信する前に、何らかの正常なロード条件が満たされるようにサブプロセスを監視することをお勧めします (おそらく、パイプでバイトを送信するだけです)。

于 2013-07-24T19:21:49.197 に答える