Код: Выделить всё
#!/usr/bin/python
import time
try:
time.sleep(100)
except KeyboardInterrupt:
pass
except:
print "error"
Код: Выделить всё
./test & pid=$!
sleep 1
kill -s 2 $pid
Я не могу понять, что происходит, и мне хотелось бы это понять. Итак, в чем разница и почему?
Речь идет не о том, как перехватить SIGINT в Python! Согласно документации – это способ, который должен работать:
Python по умолчанию устанавливает небольшое количество обработчиков сигналов: SIGPIPE ... и SIGINT транслируется в исключение KeyboardInterrupt
Он действительно перехватывает KeyboardInterrupt, когда SIGINT отправляется командой kill, если программа запускается непосредственно из оболочки, но когда программа запускается из сценария bash, запущенного в фоновом режиме, кажется, что KeyboardInterrupt никогда не вызывается.
Подробнее здесь: https://stackoverflow.com/questions/407 ... not-in-scr
Мобильная версия