Je commence souvent à lire un fichier volumineux, puis je veux quitter au bout d'un moment, mais il y a un décalage entre l'appui sur
Ctrl+ Cet l'arrêt du programme. Existe-t-il une chance de réduire le décalage en appuyant plusieurs fois sur la touche Ctrl+ C? Ou est-ce que je gaspille mes touches?
41
bash
, mais pas le cas danszsh
lequel ferme toujours le parent. C'est l'une des raisons pour lesquelles j'aime bienzsh
.^C
quand il enregistrera la presse (au moins bash le fera)Réponses:
Après la première Ctrl-C, le programme recevra
SIGINT
et commencera généralement le nettoyage (suppression des fichiers tmp, fermeture des sockets, etc.). Si vous frappez de Ctrl-Cnouveau pendant que cela se produit , il peut arriver que vous interrompiez la routine de nettoyage (c’est-à-dire que le signal supplémentaire risque d’ être exploité au lieu d’être laissé seul), laissant ainsi un désordre derrière vous. Bien que ce ne soit généralement pas le cas, le plus souvent, les signaux supplémentaires sont envoyés aprèsle processus est terminé (en raison des retards inhérents à l'interaction de l'opérateur avec le système). Cela signifie que les signaux sont reçus par un autre processus (souvent shell, mais pas toujours). Si ce destinataire ne gère pas correctement ce signal (comme le fait d'habitude Shell - voir la réponse de Jenny D), vous risquez d'être désagréablement surpris par le résultat de cette action.la source
INT
que le processus reçoit.trap "sleep 20 || echo clean up cancelled!" EXIT ; sleep 10
. Exécutez le script et appuyez deux fois sur ctrl-C. Vous verrez que le second ctrl-C est passé à la routine "clean up" (dans l'instruction trap) et termine sasleep
commande.trap "sleep 20 || echo clean up cancelled!; sleep 10; echo 'but continued'" EXIT ; sleep 10
ce sont juste lessleep
commandes qui reçoivent les signaux. Nous avions tous les deux tort xDisig
est activé, dès que CTRL-C est pressé et reçu par le noyau (pour un émulateur de terminal, dès que l'émulateur de terminal l'écrit sur le côté maître du pseudo-terminal), le signal SIGINT est envoyé à tous les processus dans le groupe de processus de premier plan du terminal. Il est peut-être bloqué à cet endroit, mais il ne sera pas transmis ultérieurement à un autre processus. Même si la mémoire tampon du terminal est saturée (les applications n'ont lu aucune des choses que vous avez saisies), le CTRL-C saute dans la file d'attente.Vous les gaspillez. Tout ce qui se passe, c'est qu'une fois que le serveur a terminé avec la sortie d'écran, il en reçoit plusieurs Ctrl-C. Le premier sera utilisé pour tuer le processus, et les suivants se retrouveront dans votre shell, qui ressemblera à quelque chose comme:
la source
Réponse courte : Si le processus y réagit.
Réponse longue : lorsque vous appuyez sur ctrl+, cle noyau envoie un signal au processus. Quel signal peut être déterminé par la commande suivante:
Voir la page de manuel de
stty
:C'est le signal
INT
, également appelé numéro 2. Lorsque le processus a un gestionnaire de signal, il peut réagir à cela. La plupart des processus effectuent certains travaux de nettoyage pour aboutir.la source
kernel
(la discipline de ligne du terminal, le pilote de terminal) qui envoie SIGINT à chaque processus du groupe de processus de premier plan du terminal.Tu as raison. Les touches sont gaspillées. Lorsque vous appuyez sur le bouton Crtl+Cet que celui-ci est détecté, des ressources doivent être effacées, ce qui explique le temps nécessaire. Le seul cas où je sache où il Ctrl+Cest nécessaire d’ appuyer est lorsque vous souhaitez annuler un processus de mise à jour de Yum, où Yum vous oblige à appuyer Ctrl+Cdeux fois pour confirmer que vous souhaitez réellement annuler.
la source
Bien qu’un seul Ctrl-Csoit nécessaire dans le cas général, il existe certaines situations où cela peut être nécessaire. Python, par exemple, intercepte Ctrl-Clorsqu’un nouveau thread est créé. Ainsi, en cas de problème lors du démarrage de nombreux threads, il est nécessaire de le renvoyer à plusieurs reprises afin qu’il parvienne au
python
processus parent sans être ignoré. pris.la source
Je dois toujours appuyer Ctrlcplusieurs fois. Je ne l'ai jamais fait répondre à la première presse et je dois l'utiliser plusieurs fois jusqu'à ce que le système se rende compte qu'il y a un Ctrlcenvoi. On dirait qu’il en manque ou en perd la plupart.
la source