Я использую версию python 2.7 на ubuntu. Мне интересно, как различные сигналы обрабатываются в программе python во время ее выполнения. Есть ли выбор на основе приоритета? Например: если в то же время генерируются два разных сигнала, какой из них будет подан первым? В моей приведенной ниже программе он ждет, когда пользователь нажмет клавишу Ctrl-C, если это будет сделано, это покажет, что «Процесс нельзя убить с помощью клавиши ctrl-c!». Наряду с этим он продолжает генерировать сигнал SIGALRM каждую секунду и каждый раз генерирует сообщение «Got alarm».Как различные сигналы обрабатываются в python
#!/usr/bin/env python
import signal
import time
def ctrlc_catcher(signum, frm):
print "Process can't be killed with ctrl-c!"
def alarm_catcher(signum,frame):
print "Got an alarm"
signal.signal(signal.SIGINT, ctrlc_catcher)
signal.signal(signal.SIGALRM, alarm_catcher)
while True:
signal.alarm(1)
time.sleep(1)
pass
Теперь, когда я выполняю программу она производит следующий вывод на неопределенный срок:
Got an alarm
Got an alarm
Got an alarm
Got an alarm
Если во время выполнения я ударил клавишу Ctrl-C один раз, то выходной сигнал прерывается, и, как показано ниже:
Got an alarm
Got an alarm
Got an alarm
Got an alarm
Process can't be killed with ctrl-c
Got an alarm
Все работает как запрограммировано и как ожидалось. Мой вопрос, если нажать клавишу Ctrl-C непрерывно, то почему выход, как указано ниже:
Process can't be killed with ctrl-c
Process can't be killed with ctrl-c
Process can't be killed with ctrl-c
Почему не выход относительно срабатывание сигнализации также отображается в выводе выше в качестве будильника запускается каждую секунду? Игнорируется ли сигнал тревоги (signal.ALARM) из-за сигнала. SIGNIT? Или непрерывное нажатие клавиши Ctrl-C приостанавливает что-то? Thanks
Спасибо и +1 за разъяснение! –