Когда я пытаюсь что-то остановить, я использую ^Cи иногда ^Dв терминале.
В чем разница между двумя? Почему какая-то программа не отвечает ^C, но ^D. Почему Terminal.app просто закрывается при использовании ^D?
Когда я пытаюсь что-то остановить, я использую ^Cи иногда ^Dв терминале.
В чем разница между двумя? Почему какая-то программа не отвечает ^C, но ^D. Почему Terminal.app просто закрывается при использовании ^D?
Ответы:
CtrlCприказывает терминалу отправить SIGINTтекущий процесс переднего плана, который по умолчанию означает завершение приложения. CtrlDсообщает терминалу, что он должен зарегистрировать EOF на стандартном вводе, что bash интерпретирует как желание выйти.
Ctrl+ D( ^D) означает конец файла . Он работает только в начале строки (я немного упрощаю) и не действует, если программа не читает ввод с терминала. В своем эксперименте ^Dсказали оболочке, что вы больше не будете вводить команды, поэтому она завершилась; затем терминал вышел, потому что его подпрограмма была завершена.
Ctrl+ C( ^C) означает «прервать», то есть остановить то, что вы делаете. Технически, нажатие ^Cпосылает сигнал INT , который по умолчанию завершает приложение, но который во многих программах означает возврат на верхний уровень (например, в оболочке, прекращение ввода командной строки и возврат к первоначальному приглашению).
Если программа не отвечает ^C, вы можете попробовать Ctrl+ \( ^\). Это посылает сигнал ВЫХОДА , который по умолчанию завершает приложение, и который перехватывает не так много программ.
Еще один ключ, который отправляет сигнал Ctrl+ Z( ^Z). Он отправляет сигнал TSTP , который приостанавливает выполнение программы на переднем плане. (TSTP - это сокращение от терминальной остановки; это похоже на STOP, но TSTP можно игнорировать, а STOP - нет.) Из оболочки вы можете возобновить выполнение этой программы с помощью fgкоманды (резюме на переднем плане) или bgкоманды (возобновить в фон).
Все эти ключи могут быть изменены с помощью sttyкоманды. Некоторые программы, особенно полноэкранные программы с привязками клавиш, отключают их.
KeyboardInterrupt? Он завершает работу с помощью Ctrl + D (если в начале строки) и с помощью Ctrl + \.
В добавление к 2 действительно хорошим ответам выше, вот пример:
Если вы pythonнаберете командную строку, вы попадете в приглашение >>> в Python.
Теперь, если вы нажмете Ctrl+C, он скажет KeyboardInterruptи останется в >>>.
Если вы входите в цикл for, например, набирая, for x in (text):он ждет, пока вы наберете текст , показывая подсказку ..., если вы нажмете Ctrl+Cсейчас, он выйдет из оператора for и вернется к приглашению >>>
Если вы нажмете Ctrl+Dв любой момент, будь то в >>> или ..., он выйдет из приглашения python и вернется в исходную оболочку.
Точно так же, если ssh'ed на другой машине, a Ctrl+Cпрекратит любые существующие команды, Ctrl+Dсделает то же самое и выйдет из машины. (Кроме того, Deleteключ такой же, как делать Ctrl+D)