Какой сигнал передает ctrl-x при использовании в терминале?

в Linux / Unix есть сигналы. The CtrlC (одинSIGINT) для меня очевиден. Теперь, в некоторых других приложениях есть сигналы через CtrlX?! Это вообще сигнал или генерировать последовательности? Есть ли что-нибудь еще, что я могу использовать как что-то похожее на CtrlC ( CtrlV, CtrlX ...)?

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

5 ответов


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

stty -a

возможно, это недоразумение. CtrlC не генерирует сигнал. Вполне можно нажать CtrlC в любом месте, и никаких плохих вещей не произойдет (например, в каждом текстовом редакторе или текстовом процессоре, это де-факто-стандарт для "копирования").

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

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

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


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

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

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

выше настраиваются. Это задокументировано на termios(3) manpage.


С Википедия

Ctrlx Ctrle: редактирование текущей строки в программе $EDITOR или vi если не определено.

Ctrlx Ctrlr: прочитайте содержимое файла inputrc и включите любые привязки или назначения переменных, найденные там.

Ctrlx Ctrlu : инкрементная отмена, отдельно запоминается для каждой строки.

Ctrlx Ctrlv: отображение информации о версии текущего экземпляра Баша.

Ctrlx Ctrlx : чередует Курсор со старым положением. (C-x, потому что x имеет a форма пересечения).

одно дополнительное использование Ctrlx расширение * при вводе команды в командной консоли.

скажите, что у вас есть:

$ ls *

клавишей Ctrlx а то * расширит * ко всем элементам в текущем каталоге что-то вроде этого:

$ ls dir1 dir2 file1 file2 file3`

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


на Linux / Unix есть сигналы. The Ctrl+C (один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 ())