web-dev-qa-db-fra.com

Quel signal ctrl-x envoie-t-il lorsqu'il est utilisé dans un terminal?

Sous Linux/Unix, il y a des signaux. le CtrlC un (SIGINT) est évident pour moi. Maintenant, dans certaines autres applications, il y a des signaux via CtrlX?! Est-ce même un signal ou génère-t-il une séquence d'échappement? Y a-t-il autre chose que je peux utiliser comme quelque chose de similaire à CtrlC ( CtrlVCtrlX ...)?

Si quelqu'un a une idée, je connais mieux C que bash, mais les réponses dans les deux langues sont appréciées!

42
imacake

Pour obtenir toutes les affectations de caractères de contrôle de terminal:

stty -a
76
jfg956

Il y a peut-être un malentendu. CtrlC ne génère pas de signal. Il est parfaitement possible d'appuyer sur CtrlC n'importe où, et aucune mauvaise chose ne se produira (par exemple dans chaque éditeur de texte ou traitement de texte, c'est la norme de facto pour la "copie").

Cependant, lorsque vous exécutez un programme dans le Shell, alors vos touches sont vraiment dans le Shell, pas dans votre programme. Le Shell transmettra (presque) tout au stdin de votre programme et transmettra tout ce qui provient de stdout au terminal ou à un autre processus ou à un fichier (si vous avez utilisé un canal ou une redirection).

Si le Shell vous voit appuyez sur CtrlC, puis le Shell envoie le signal d'interruption. Mais c'est vraiment quelque chose que fait Shell, pas quelque chose qui se produit comme par magie à cause de la combinaison de touches.

Sur CtrlX, vous vouliez probablement dire CtrlZ. Cela arrête un processus, et le shell génère un nombre que vous pouvez utiliser avec fg pour le relancer.

51
Damon

Le terminal attribue une signification particulière à certaines séquences de touches. Cela comprend la suppression d'un caractère, la suppression au début de la ligne ( CtrlU ), ...

Plus précisément, lorsque le mode local du terminal ISIG est activé:

  • VINTR (généralement CtrlC) génère un SIGINT (interrompu par l'utilisateur).
  • VQUIT (généralement Ctrl\) génère un SIGQUIT (comme SIGINT, mais aussi dump core).
  • VSUSP (généralement CtrlZ) génère un SIGTSTP (arrêt par les E/S du terminal).
  • VDSUSP (sur certains systèmes, pas sur Linux) génère un SIGTSTP lorsque le programme essaie de le lire.

Les éléments ci-dessus sont configurables. Ceci est documenté sur la page de manuel termios (3) .

15
ninjalj

De Wikipedia

CtrlxCtrle : Modifie la ligne actuelle dans le programme $ EDITOR, ou vi si non défini.

CtrlxCtrlr : Lisez le contenu du fichier inputrc et incorporez toutes les liaisons ou affectations de variables qui s'y trouvent.

CtrlxCtrlu : Annulation incrémentielle, mémorisée séparément pour chaque ligne.

CtrlxCtrlv : Afficher les informations de version sur l'instance actuelle de bash.

CtrlxCtrlx : Alterne le curseur avec son ancienne position. (C-x, car x a une forme de croisement).

Une utilisation supplémentaire de Ctrlx est d'étendre le * lors de la saisie d'une commande dans le shell.

Dites que vous avez:

$ ls *

Pressage Ctrlx et alors * va étendre * à tous les éléments du répertoire courant vers quelque chose comme ceci:

$ ls dir1 dir2 file1 file2 file3`

Vous pouvez également vous référer à cette rubrique sur SuperUser pour l'utilisation que j'ai décrite ci-dessus.

13
Nobilis

Sous Linux/Unix, il y a des signaux. le Ctrl+C un (SIGINT) est évident pour moi ...

Si vous avez besoin d'une liste de signaux disponibles sur votre système, alors signum.h peut être utile. Ci-dessous est extrait 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 ())
6
jww