web-dev-qa-db-fra.com

Que faire lorsque Ctrl-C ne supprimera pas le travail en cours d'exécution?

Parfois, les processus ignorent le signal SIGINT envoyé par Ctrl-C dans Bash. Par exemple, man et vi. En supposant que vous ne vouliez pas google ou lire le manuel sur la façon de quitter le processus en cours, existe-t-il une séquence de touches qui toujours fonctionnera (sans quitter le terminal)?

98
Olivier Lalonde

Envoyer le signal SIGQUIT avec Ctrl+\.

.. $ sleep 10
^\Quit

→ Ceci est équivalent à kill -3 pid. Les programmes exécutés dans l'espace utilisateur n'ignorent pas sigquit.

Il existe également un ensemble de raccourcis clavier Magic SysRq . Un des plus intéressants est celui-ci: Alt+SysRq+k. Il tue tous les processus de la console virtuelle actuelle. Si l'un de vos ttys est complètement cassé, cela peut être utilisé pour revenir en arrière . Sur le tty sous X.org, il peut être utilisé pour tuer X sans pitié.

La clé SysRq est, sur la plupart des claviers, identique à la touche Imprimer. Sur mon carnet, vous pouvez l'invoquer à l'aide de la touche Fn. C'est à dire. Alt → Fn → Imprimer → k dans cet ordre.

Voici quelques-uns des raccourcis de base de la gestion des processus:

  • Ctrl+Z: mettre en pause un processus (plus bgà reprendre en arrière-plan, fg à lever au premier plan)
  • Ctrl+C: demander poliment au processus de fermer maintenant
  • Ctrl+\: tuer sans merci le processus qui est actuellement au premier plan
  • Alt+SysRq+s: Écrivez les données sur le disque (faites toujours ceci avant de tuer quelque chose d'important)
  • Alt+SysRq+sk: tuer sans merci tous les processus en cours sur une console virtuelle donnée
  • Alt+SysRq+sb: redémarrer sans pitié sans démonter,
  • Alt+SysRq+reisub: Sans encombre reboot even jele system est voustristement broken

Remarque: Ctrl+Z, contrairement à Ctrl+C et Ctrl+\, fonctionne également pour manname__, viname__, lesset similaires.

En cas de doute, la procédure suivante fonctionnera presque toujours:

~$ sleep 10
^Z
[5]+  Stopped              sleep 10
~$ ps
  PID TTY          TIME CMD
 4804 pts/0    00:00:00 bash
 6207 pts/0    00:00:00 sleep
 6208 pts/0    00:00:00 ps
~$ kill -9 6207
[5]+  Killed                  sleep 10
~$ 

^ Z bien sûr indique que Ctrl+Z a été pressé.


Pour un regard plus en profondeur sur les shells et les terminaux, voir aussi mes réponses sur:

139
Stefano Palazzo

Tu peux essayer Ctrl+\

13
Benjamin

Parfois le CTRL+C est envoyé au mauvais programme ou canal d’entrée. Ceci est particulièrement fréquent avec les éditeurs tels que vi, avec des commandes avec une sortie redirigée, des commandes bash complexes impliquant des boucles, etc.

Une solution simple et rapide consiste à suspendre le travail CTRL+Z puis tuez-le par le numéro de travail: kill %1 ou kill -9 %1, etc.

8
tylerl
  • Essayez l'une de celles-ci:

    Ctrl+4

    Ctrl+\


  • Ou:

    Ctrl+Z puis lancez:

    kill %1

%1 est le nombre de travaux renvoyés lorsque vous avez appuyé sur Control-Z. Ajoutez -9 pour forcer la mise à mort.


Lorsque vous êtes dans la console texte, vous pouvez également essayer: Ctrl-SysRq. Le noyau devrait tuer le processus.

Ou SysRq-k, tue tous les processus de la console virtuelle actuelle (peut également tuer les programmes X et svgalib).

Remarque: lorsque les clés magiques SysRq sont utilisées pour tuer un programme graphique gelé, le programme n'a aucune chance de restaurer le mode texte. Cela peut rendre tout illisible.

Voir: Touche Magic SysRq et ses combinaisons de commandes.

6
kenorb

Pour quitter man, utilisez q Pour quitter vi utilisez :q

3
antivirtel

Il est possible que vous ayez modifié le raccourci de copie à partir de:

CTRL+SHIFT+C

À

CTRL+C

De cette façon, lorsque vous essayez de tuer un processus, le CTRL+C ne fonctionne pas.

Essayez de remplacer le raccourci de copie à CTRL+SHIFT+C.

0
Minter