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 ( CtrlV, CtrlX ...)?
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!
Pour obtenir toutes les affectations de caractères de contrôle de terminal:
stty -a
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.
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) .
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.
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 ())