0

これらのテスト python コードを次のように記述しました。

import signal
import time
import os

def handler(signum, frame):
    print "do whatever, like call thread.interrupt_main()"
    return

signal.signal(signal.SIGINT, handler)

while 1:
    try:
        time.sleep(10)
    except:
        os.kill(int(os.getpid()), signal.SIGINT)
        pass

Windowsでこのテストコードを実行すると、プロセスは「thread.interrupt_main()を呼び出すなど、何でもします」と出力してから終了します。Linux では正しく動作します。

なぜWindowsで動作しないのですか?

4

1 に答える 1

1

http://docs.python.org/2/library/os.html#os.kill

Windows: signal.CTRL_C_EVENT および signal.CTRL_BREAK_EVENT シグナルは、サブプロセスなど、共通のコンソール ウィンドウを共有するコンソール プロセスにのみ送信できる特別なシグナルです。sig に他の値を指定すると、TerminateProcess API によってプロセスが無条件に強制終了され、終了コードが sig に設定されます。

次のコードを試してください:

import time

while 1:
    try:
        time.sleep(1)
    except KeyboardInterrupt:
        print "do whatever, like call thread.interrupt_main()"
于 2013-07-09T06:48:10.653 に答える