Какой сигнал посылает ctrl-x при использовании в терминале? - PullRequest
42 голосов
/ 20 июля 2011

В Linux / Unix есть сигналы. Ctrl C one (SIGINT) для меня очевиден. Теперь в некоторых других приложениях есть сигналы через Ctrl X ?! Это даже сигнал или он генерирует escape-последовательность? Есть ли что-нибудь еще, что я могу использовать как нечто подобное Ctrl C ( Ctrl V , Ctrl X ...)?

Если кто-то знает, я знаком с C больше, чем с bash, но ответы на обоих языках приветствуются!

Ответы [ 5 ]

75 голосов
/ 20 июля 2011

Чтобы получить все назначения символов управления терминалом:

stty -a
50 голосов
/ 20 июля 2011

Возможно, есть недоразумение. Ctrl C не генерирует сигнал.Совершенно возможно нажать Ctrl C где угодно, и ничего плохого не произойдет (например, в любом текстовом редакторе или текстовом редакторе, это де-факто-стандарт для «копирования»)).

Однако, когда вы запускаете программу в оболочке , ваши нажатия клавиш действительно переходят в оболочку, а не в вашу программу.Оболочка будет перенаправлять (почти) все в стандартный поток вашей программы и перенаправлять все, что поступает из stdout, либо в терминал, либо в другой процесс, либо в файл (если вы использовали канал или перенаправление).

Если оболочка видит васнажмите Ctrl C , затем оболочка отправит сигнал прерывания .Но на самом деле это именно то, что делает оболочка, а не то, что волшебным образом происходит из-за комбинации клавиш.

О Ctrl X , вы, вероятно, имели в виду Ctrl Z .Это останавливает процесс, и оболочка выводит число, которое вы можете использовать с fg, чтобы запустить его снова.

14 голосов
/ 20 июля 2011

Терминал назначает специальное значение определенным последовательностям клавиш.Это включает в себя удаление символа, удаление в начале строки ( Ctrl U ), ...

В частности, когда терминал ISIG локальный режим включен:

  • VINTR (обычно Ctrl C ) генерирует SIGINT (прервано пользователем).
  • VQUIT(обычно Ctrl \ ) генерирует SIGQUIT (как SIGINT, но также и дамп ядра).
  • VSUSP (обычно Ctrl Z ) генерирует SIGTSTP (остановка через терминальный ввод / вывод).
  • VDSUSP (в некоторых системах, не в Linux) генерирует SIGTSTP, когда программа пытаетсяПрочитайте его.

Выше можно настроить.Это описано на странице termios (3) .

12 голосов
/ 10 января 2013

Из Википедия

Ctrl x Ctrl e : правкитекущая строка в программе $ EDITOR или vi, если она не определена.

Ctrl x Ctrl r : чтениев содержимое файла inputrc и включите в него любые найденные привязки или назначения переменных.

Ctrl x Ctrl u : добавочная отмена, запоминается отдельно для каждой строки.

Ctrl x Ctrl v : отображение информации о версиио текущем экземпляре bash.

Ctrl x Ctrl x : чередует курсор со своей старой позицией.(Cx, потому что x имеет форму пересечения).

Еще одно использование Ctrl x - это расширение * при вводе команды воболочка.

Скажем, у вас есть:

$ ls *

Нажатие Ctrl x , а затем * развернется * ко всем элементам в текущем каталоге что-то вроде этого:

$ ls dir1 dir2 file1 file2 file3`

Вы также можете обратиться к этой теме в SuperUser для использования, которое я описал выше.

5 голосов
/ 24 февраля 2014

В Linux / Unix есть сигналы. Ctrl + C one (SIGINT) для меня очевиден ...

Если вам нужен список сигналов, доступных в вашей системе,тогда signum.h может быть полезным.Ниже приводится Debian 7.3:

/* Signals.  */
#define SIGHUP      1   /* Hangup (POSIX).  */
#define SIGINT      2   /* Interrupt (ANSI).  */
#define SIGQUIT     3   /* Quit (POSIX).  */
#define SIGILL      4   /* Illegal instruction (ANSI).  */
#define SIGTRAP     5   /* Trace trap (POSIX).  */
#define SIGABRT     6   /* Abort (ANSI).  */
#define SIGIOT      6   /* IOT trap (4.2 BSD).  */
#define SIGBUS      7   /* BUS error (4.2 BSD).  */
#define SIGFPE      8   /* Floating-point exception (ANSI).  */
#define SIGKILL     9   /* Kill, unblockable (POSIX).  */
#define SIGUSR1     10  /* User-defined signal 1 (POSIX).  */
#define SIGSEGV     11  /* Segmentation violation (ANSI).  */
#define SIGUSR2     12  /* User-defined signal 2 (POSIX).  */
#define SIGPIPE     13  /* Broken pipe (POSIX).  */
#define SIGALRM     14  /* Alarm clock (POSIX).  */
#define SIGTERM     15  /* Termination (ANSI).  */
#define SIGSTKFLT   16  /* Stack fault.  */
#define SIGCLD      SIGCHLD /* Same as SIGCHLD (System V).  */
#define SIGCHLD     17  /* Child status has changed (POSIX).  */
#define SIGCONT     18  /* Continue (POSIX).  */
#define SIGSTOP     19  /* Stop, unblockable (POSIX).  */
#define SIGTSTP     20  /* Keyboard stop (POSIX).  */
#define SIGTTIN     21  /* Background read from tty (POSIX).  */
#define SIGTTOU     22  /* Background write to tty (POSIX).  */
#define SIGURG      23  /* Urgent condition on socket (4.2 BSD).  */
#define SIGXCPU     24  /* CPU limit exceeded (4.2 BSD).  */
#define SIGXFSZ     25  /* File size limit exceeded (4.2 BSD).  */
#define SIGVTALRM   26  /* Virtual alarm clock (4.2 BSD).  */
#define SIGPROF     27  /* Profiling alarm clock (4.2 BSD).  */
#define SIGWINCH    28  /* Window size change (4.3 BSD, Sun).  */
#define SIGPOLL     SIGIO   /* Pollable event occurred (System V).  */
#define SIGIO       29  /* I/O now possible (4.2 BSD).  */
#define SIGPWR      30  /* Power failure restart (System V).  */
#define SIGSYS      31  /* Bad system call.  */
#define SIGUNUSED   31

#define _NSIG       65  /* Biggest signal number + 1
                   (including real-time signals).  */

#define SIGRTMIN        (__libc_current_sigrtmin ())
#define SIGRTMAX        (__libc_current_sigrtmax ())
...