Ctrl+D — это не сигнал, это конец файла.
Если у вас есть интерактивная программа, вы, скорее всего, будете читать STDIN, а Ctrl+D — это то, как пользователь говорит, что ввод окончен. Вне этого контекста оно не имеет особого значения.
Код, который выполняется после этого, обычно является кодом после "readline" или аналогичного вызова. Это эквивалентно чтению любого другого файла и обнаружению того, что он закончился, и нет больше данных для чтения - соответствующий вызов даст вам указание на это.
Например, это может быть простая интерактивная программа:
import sys
while True:
line = sys.stdin.readline() # readline will return "" on EOF
if line:
do_something_with(line) # * if user just pressed Enter line will
# be "\n", i.e. still True
else: # * user pressed C-D, i.e. stdin has been
sys.exit(0) # closed readline call must have returned ""
С другой стороны, Ctrl+C отличается тем, что пользователь говорит своему терминалу завершить запущенный процесс. Это может произойти в любой момент, независимо от того, запрашивает ли процесс какие-либо данные или вообще заботится о внешнем мире.
Поскольку процесс не может ожидать этого, вам нужно signal
установить так называемые ловушки, которые представляют собой механизм, предоставляемый ОС, чтобы позволить процессам сказать: «Если вы когда-нибудь захотите меня уволить, пожалуйста, просто выполните это вместо этого ...» (что может быть чем угодно, включая ничего, то есть просто игнорирование сигнала). Исключения — это специальные сигналы, такие как SIGKILL, которые не могут быть перехвачены процессом.
person
Alois Mahdal
schedule
07.03.2014