Linux ctrl d какой сигнал

Обновлено: 02.07.2024

Если вы нажмете Ctrl-D, то драйвер терминала отправит сигнал SIGINT обработчику сигнала программы. Примечание: нажатие клавиши VINTR очистит буфер ввода терминала, поэтому вы не сможете прочитать символы, введенные в строке до нажатия клавиши VINTR. Нет необходимости обрабатывать сигналы.

Что такое Ctrl-D в C?

Ctrl + D ( ^D ) означает конец файла. Если программа не отвечает на ^C , вы можете попробовать Ctrl + \ ( ^\ ). Это отправляет сигнал QUIT, который по умолчанию завершает работу приложения и который перехватывают не так много программ.

Нужно ли дважды нажимать Ctrl-D?

3 ответа. В Unix-подобных системах (по крайней мере, по умолчанию) условие конца файла вызывается нажатием Ctrl-D в начале строки или двойным нажатием Ctrl-D, если вы не находитесь в начале строки. . В последнем случае последняя строка, которую вы читаете, не будет иметь «\n» в конце; вам может потребоваться разрешить это.

Как вы работаете с Ctrl-D?

Как уже говорили другие, чтобы обработать Control + D , обработайте «конец файла». Control + D — это часть связи между пользователем и псевдофайлом, который вы видите как стандартный ввод. Это означает не конкретно «конец файла», а в более общем смысле «сбросить ввод, который я ввел до сих пор».

Что делает Ctrl D?

Все основные интернет-браузеры (например, Chrome, Edge, Firefox, Opera) при нажатии Ctrl+D добавляют текущую страницу в закладки или добавляют ее в избранное. Например, вы можете нажать Ctrl+D сейчас, чтобы добавить эту страницу в закладки.

Что делает Ctrl D в Windows?

Комбинации клавиш Ctrl+D, также называемые Control+D и C-d, различаются в зависимости от программы. Например, в большинстве интернет-браузеров он используется для добавления текущего сайта в закладки или избранное. Но другие программы, такие как Microsoft PowerPoint, используют его для дублирования объектов.

Что делает Ctrl d в кодировании?

Что делает control d в Linux?

Последовательность Ctrl-D закрывает окно терминала или завершает ввод строки терминала. Возможно, вы никогда не пробовали ctrl-u.

Какой сигнал Ctrl Z?

Ctrl-Z отправляет сигнал TSTP («терминальная остановка», SIGTSTP); по умолчанию это приводит к приостановке выполнения процесса. Ctrl-\ отправляет сигнал ВЫХОД (SIGQUIT); по умолчанию это приводит к завершению процесса и дампу ядра.

Можно ли добавить символ Ctrl-C в процесс?

Нет, передача символа CTRL-C в ваш процесс не сработает, потому что нажатие клавиши CTRL-C захватывается терминалом и преобразуется в сигнал уничтожения, отправляемый процессу. Правильный код символа (в ASCII) для CTRL-C — это код номер 3, но если вы повторите это в своей программе, она просто получит символ из своего стандартного ввода.

Какой правильный код символа для Ctrl-C?

Правильный код символа (в ASCII) для CTRL-C — это код номер 3, но если вы повторите его в своей программе, она просто получит символ со своего стандартного ввода. Это не приведет к завершению процесса. Если вы хотите упростить задачу поиска и уничтожения процесса, вы можете использовать что-то вроде:

Я хочу перехватить сигнал Ctrl+D в своей программе и написать для него обработчик сигнала. Как я могу это сделать? Я работаю над C и использую систему Linux.

7 ответов 7

Как уже говорили другие, для обработки Control + D необходимо обрабатывать "конец файла".

Control + D — это часть связи между пользователем и псевдофайлом, который вы видите как стандартный ввод. Это не означает конкретно «конец файла», а в более общем смысле «сбросить ввод, который я набрал до сих пор». Сброс означает, что любой вызов read() на стандартный ввод в вашей программе возвращает длину ввода, введенного с момента последнего сбрасывания. Если строка не пуста, ввод становится доступным для вашей программы, хотя пользователь еще не набрал «return». Если строка пуста, функция read() возвращает ноль, что интерпретируется как "конец файла".

Поэтому при использовании Control + D для завершения программы это работает только в начале строки или если вы делаете это дважды (в первый раз для сброса, во второй раз для read(), чтобы вернуть ноль).

Привет, всем, кто найдет этот вопрос; пожалуйста, перестаньте голосовать за это решение. Это может быть «технически правильно» в том смысле, что Control-D — это не сигнал, но для программистов это самый бесполезный ответ на всей этой странице.

Проблема в том, что этот ответ не отвечает на вопрос. «Просто обработайте EOF». КАК? Как вы защищаете свое приложение от завершения и чтения со стандартного ввода? Вы как-то снова открываете стандартный ввод? «Просто сделай вот что, а я не собираюсь тебе рассказывать, как это сделать» — крайне бесполезный ответ.

@Doug Этот второй комментарий проясняет, что вы имеете в виду, чем ваш первый комментарий, который является скорее снисходительным призывом оценить ответ так же, как вы его оцениваете, без объяснения причин.

@EnricoMariaDeAngelis Для меня это все еще работает точно так же, как когда я писал этот ответ: сначала Ctrl-D вызывает отображение «foofoo», а второй Ctrl-D возвращает меня к терминалу. Я никогда не сталкивался с терминалом, который работал бы по-разному (в OS X и Linux), но, возможно, ваш терминал по какой-то причине не нажимает первый Ctrl-D?

Когда я пытаюсь что-то остановить, я использую ^C, а иногда и ^D в терминале.

В чем разница между ними? Почему какая-то программа не отвечает на ^C , а ^D . Почему Terminal.app просто закрывается, когда я использую ^D?

К вашему сведению: см. страницы Википедии: КОНЕЦ ТЕКСТА символ U+0003, созданный Control+C, и КОНЕЦ ПЕРЕДАЧИ символ U+0004, созданный Control+D .

4 ответа 4

Ctrl C указывает терминалу отправить SIGINT текущему процессу переднего плана, что по умолчанию приводит к завершению приложения. Ctrl D сообщает терминалу, что он должен зарегистрировать EOF на стандартном вводе, который bash интерпретирует как желание выйти.

Ctrl + D ( ^D ) означает конец файла. Он работает только в начале строки (я немного упрощаю) и не действует, если программа не считывает ввод с терминала. В вашем эксперименте ^D сообщил оболочке, что вы больше не собираетесь вводить команды, поэтому она вышла; затем терминал вышел, потому что его подпрограмма завершилась.

Ctrl + C ( ^C ) означает «прервать», т. е. остановить то, что вы делаете. Технически, нажатие ^C отправляет сигнал INT, который по умолчанию завершает работу приложения, но который во многих программах означает возврат на верхний уровень (например, в оболочке прекратить ввод командной строки и вернуться к нетронутой подсказке).

Если программа не отвечает на ^C , вы можете попробовать Ctrl + \ ( ^\ ). Это отправляет сигнал QUIT, который по умолчанию завершает работу приложения и который перехватывают не так много программ.

Еще одна клавиша, которая посылает сигнал, — это Ctrl + Z ( ^Z ). Он отправляет сигнал TSTP, который приостанавливает работу программы, работающей на переднем плане. (TSTP — это сокращение от «терминальная остановка»; это похоже на STOP, но TSTP можно игнорировать, тогда как STOP нельзя.) Из оболочки вы можете возобновить выполнение этой программы с помощью команды fg (возобновить на переднем плане) или команды bg (возобновить на заднем плане).

Все эти ключи можно изменить с помощью команды stty. Некоторые программы, особенно полноэкранные программы с привязкой клавиш, отключают их.

Уловки управляющей последовательности Linux

Бен Паттерсон / IDG

В системах Linux доступно довольно много управляющих последовательностей — многие из них я использую постоянно, а некоторые я открыл для себя совсем недавно — и они могут быть на удивление полезными. В сегодняшней публикации мы рассмотрим ряд из них и посмотрим, что они делают и чем могут быть полезны.

Для начала, если вы не новичок в командной строке, вы, несомненно, знакомы с последовательностью Ctrl-C, которая используется для завершения запущенной команды. В печати эта же последовательность может быть выражена как ^c или control-c, а иногда «c» будет писаться с большой буквы, но выражение всегда означает «удерживайте клавишу управления и нажмите указанную клавишу — без задействования клавиши Shift или дефиса.

Последовательность Ctrl-D закрывает окно терминала или завершает ввод строки терминала.

Возможно, вы никогда не пробовали Ctrl-U. Эта управляющая последовательность и ее «соучастник преступления» ctrl-y работают вместе интересным образом. Последовательность ctrl-u удаляет текст, который вы только что набрали, из командной строки и помещает его в нечто вроде буфера обмена, а ctrl-y возвращает его обратно. Таким образом, когда вы только что набрали сложную команду, но еще не нажали клавишу возврата, а затем поняли, что вам нужно сначала выполнить некоторые другие команды, вы можете сохранить введенную вами команду, позаботившись о любых других командах, которые вам нужны. запустите, а затем верните сохраненную команду на место.

Последовательности Ctrl-S и Ctrl-Q также имеют рабочие отношения. Там, где ctrl-s останавливает ваш экран, ctrl-q позволяет продолжить показ снова.

Последовательность Ctrl-Z приостанавливает текущий процесс. Вы можете вернуть его к жизни с помощью команды fg (передний план) или запустить приостановленный процесс в фоновом режиме с помощью команды bg. Если вы затем захотите остановить процесс, вам нужно будет перечислить свои фоновые процессы с помощью команды jobs и использовать kill (например, kill %1). Не забудьте %, который определяет процесс по номеру задания, а не по его PID.

Последовательности Ctrl-H, Ctrl-W и Ctrl-U стирают (т. е. возвращают) последнюю только что набранную букву, последнее набранное слово или всю строку.

Ctrl-a и ctrl-e переместят курсор в начало или конец только что набранного текста.

Последовательность Ctrl-R позволяет легко повторно запускать недавно введенные команды. Введите ctrl-r, а затем введите начало команды, которую вы хотите повторить.Команда run будет самой последней, начинающейся с введенных вами букв.

Последовательности управления могут быть удобными, если вы можете держать их в чистоте. Вот краткое изложение только что рассмотренных управляющих последовательностей:

Вы можете взять под контроль управляющие последовательности, которые не работают должным образом, с помощью такой команды, которая повторно устанавливает ctrl-h в качестве последовательности стирания.

Обратите внимание, что команда stty -a перечислит ваши управляющие последовательности:

Подробнее о команде stty см. в разделе Использование stty в ваших интересах.

Единственная трудность при использовании управляющих последовательностей – это помнить, что для чего нужно. Для некоторых буква предполагает функцию управляющей последовательности. Для других . ну, не так уж и много. Но все они могут быть очень полезными.

Присоединяйтесь к сообществам Network World на Facebook и LinkedIn, чтобы комментировать самые важные темы.

Сандра Генри-Стокер занимается администрированием систем Unix более 30 лет. Она описывает себя как «USL» (Unix как второй язык), но помнит достаточно английского, чтобы писать книги и покупать продукты. Она живет в горах в Вирджинии, где, когда не работает с Unix и не пишет о ней, отгоняет медведей от своих кормушек для птиц.

Читайте также: