В приведенном ниже сценарии Python я пытаюсь поймать сигнал SIGTERM (который может быть получен из другого процесса), установив свой isr и переопределив значение по умолчанию для Python. в то время как этот скрипт отлично работает в linux (не удивительно), в windows он не работает (не удивительно)!
Как я могу получить такое же поведение в Windows 7?
Я запускаю Python 2.7 на ПК с Windows 7.
import os
import signal
import time
def instal_isr(SIGN, isr):
signal.signal(SIGN, isr)
def sigterm_isr(SIGN, int_stack_frame):
print 'received SIGTERM, {sign} {stackframe}'.format(sign=SIGN, stackframe=int_stack_frame)
#do some stuf and exit
exit(1)
def main():
while(True):
print 'wasting your cpu cycles'
time.sleep(2)
if __name__=='__main__':
instal_isr(signal.SIGTERM, sigterm_isr)
main()
Вывод в линуксе:
wasting your cpu cycles
wasting your cpu cycles
wasting your cpu cycles
wasting your cpu cycles
received SIGTERM, 15 <frame object at 0x7f6261852dd0>
Я попытался получить соответствующую информацию из вопроса по ссылке обработка сигналов python на компьютере с Windows, ответы углубились в детали и на самом деле не охватывают этот «простой» случай.
TerminateProcess
, обрабатывать нечего. Это как Unix SIGKILL. Диспетчер процессов ядра безоговорочно завершает процесс без уведомления — по крайней мере, без уведомления кода пользовательского режима. - person Eryk Sun   schedule 28.04.2020/f
являются принудительным завершением, то естьTerminateProcess
. Они не могут быть обработаны. taskkill без/f
пытается отправить оконное сообщениеWM_CLOSE
в окна верхнего уровня и окна только для сообщений, которые принадлежат процессу. Окно консоли фактически принадлежит процессу, который выделяет сеанс консоли. Что касаетсяkill
, это сборка Cygwin kill для MSYS2? Если это так, я бы предположил, что он вызываетTerminateProcess
, поскольку в Windows нет сигналов Unix. - person Eryk Sun   schedule 28.04.2020