linux - teclado - ¿Qué señal envía ctrl-x cuando se usa en un terminal?
ctrl c en linux (5)
En Linux / Unix hay señales. El Ctrl C uno ( SIGINT
) es obvio para mí. Ahora, en algunas otras aplicaciones, hay señales a través de Ctrl X ? ¿Es eso incluso una señal o genera una secuencia de escape? ¿Hay algo más que pueda usar como algo similar a Ctrl C ( Ctrl V , Ctrl X ...)?
Si alguien tiene una pista, estoy familiarizado con C más que con bash, pero las respuestas en ambos idiomas son muy apreciadas.
En Linux / Unix hay señales. El Ctrl + C uno (
SIGINT
) es obvio para mí ...
Si necesita una lista de señales disponibles en su sistema, entonces signum.h
puede ser útil. A continuación es de 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 ())
De Wikipedia
Ctrl x Ctrl e : edita la línea actual en el programa $ EDITOR, o vi si no está definido.
Ctrl x Ctrl r : lee los contenidos del archivo inputrc e incorpora cualquier enlace o asignación de variables que se encuentre allí.
Ctrl x Ctrl u : Deshacer incremental, recordado por separado para cada línea.
Ctrl x Ctrl v : Muestra información de versión sobre la instancia actual de bash.
Ctrl x Ctrl x : alterna el cursor con su posición anterior. (Cx, porque x tiene forma de cruce).
Un uso adicional de Ctrl x es expandir *
cuando se escribe un comando en el shell.
Digamos que tienes:
$ ls *
Presionando Ctrl x y luego * ampliará *
a todos los elementos en el directorio actual a algo como esto:
$ ls dir1 dir2 file1 file2 file3`
También puede consultar este tema en SuperUser para el uso que describí anteriormente.
El terminal asigna un significado especial a ciertas secuencias de teclas. Esto incluye eliminar un personaje, eliminarlo al comienzo de la línea ( Ctrl U ), ...
Específicamente, cuando el modo local ISIG
terminal está habilitado:
-
VINTR
(generalmente Ctrl C ) genera unSIGINT
(interrumpido por el usuario). -
VQUIT
(generalmente Ctrl / ) genera unSIGQUIT
(como SIGINT, pero también dump core). -
VSUSP
(generalmente Ctrl Z ) genera unSIGTSTP
(detener por E / S de terminal). -
VDSUSP
(en algunos sistemas, no en Linux) genera unSIGTSTP
cuando el programa intenta leerlo.
Lo anterior es configurable. Esto está documentado en la página de termios(3) .
Para obtener todas las asignaciones de caracteres de control de terminal:
stty -a
Posiblemente hay un malentendido. Ctrl C no genera una señal. Es perfectamente posible presionar Ctrl C en cualquier lugar, y no pasarán cosas malas (por ejemplo, en cada editor de texto o procesador de textos, ese es el estándar de facto para "copiar").
Sin embargo, cuando ejecuta un programa en el intérprete de comandos , las pulsaciones de teclas realmente entran en el intérprete de comandos, no en su programa. El intérprete de comandos reenviará (casi) todo a la configuración estándar de su programa y reenviará todo lo que provenga de stdout al terminal u otro proceso o archivo (si usó un conducto o una redirección).
Si el shell ve que presionas Ctrl C , el shell envía la señal de interrupción . Pero eso es realmente algo que hace el caparazón, no algo que sucede mágicamente debido a la combinación de teclas.
Acerca de Ctrl X , probablemente se refería a Ctrl Z. Esto detiene un proceso y el shell genera un número que puede usar con fg
para hacer que se ejecute nuevamente.