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


98

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

Réponses:


141

Envoyez 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 . L’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é, vous pouvez l'utiliser 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. Par exemple, Alt → Fn → Imprimer → k dans cet ordre.

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

  • Ctrl+ Z: met en pause un processus (plus bgpour reprendre en arrière-plan, fgpour passer au premier plan)
  • Ctrl+ C: demander poliment au processus de fermer maintenant
  • Ctrl+ \: tuer sans pitié 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+ s, k: Tuer sans pitié tous les processus en cours sur une console virtuelle donnée
  • Alt+ SysRq+ s, b: Redémarrer sans pitié sans démonter,
  • Alt+ SysRq+ r, e, i, s, u, b: Sans risque r eboot e ven i f le s ystème est u tterly b roken,

Note: Ctrl+ Z, contrairement à Ctrl+ Cet Ctrl+ \, travaille également pour man, vi, lesset autres.

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 vous Ctrlavez Zappuyé sur + .


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


3
Fonctionne pour "dormir 10" mais ne fonctionne toujours pas pour "homme" ou "vi". De toute évidence, "kill -9 pid" fonctionne pour tuer les deux processus. Est-ce que je manque quelque chose?
Olivier Lalonde

3
Ctrl + Z fonctionne avec less, man, vi, etc. Vous pouvez ensuite les tuer en faisant un pspour voir leur identifiant de processus et les tuer en utilisant kill pidou, si vous ne vous souciez pas d'autres instances du programme killall vi,. Dans tous les cas, Ctrl-Z semble toujours fonctionner.
Stefano Palazzo

5
Vous pouvez également faire kill %%pour tuer le dernier travail et kill %5où 5 est le numéro de travail indiqué dans jobs.
Olivier Lalonde

2
Ctrl- \ envoie un SIGQUIT , pas un SIGKILL. Il existe d'importantes différences entre SIGQUIT et SIGKILL. fr.wikipedia.org/wiki/SIGQUIT
Juliano

4
Comment puis-je appuyer sur Ctrl+ \ lorsqu'il n'y a pas de \ clé dans la disposition de mon clavier?
Forivin


8

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

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


6
  • Essayez l'une de celles-ci:

    Ctrl+4

    Ctrl+\


  • Ou:

    Ctrl+ Zpuis exécutez:

    kill %1

%1est le nombre de tâches renvoyées lorsque vous avez appuyé sur Control- Z. Ajouter -9pour forcer le tuer.


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

Ou SysRq- k, tuer tous les processus sur 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.



0

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

CTRL+ SHIFT+C

À

CTRL+C

Ainsi, lorsque vous essayez de tuer un processus, le CTRL+ Cne fonctionne pas.

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


1
Changer le raccourci de copie n'est pas pertinent pour forcer la fin d'un processus!
SuB

Pouvez-vous développer votre réponse un peu? Une étape à la fois serait idéale, principalement pour que le PO puisse suivre votre suggestion. :)
ThatGuy

Cela m'a réellement aidé. Je suis habitué à CTRL + C sur MacOS et je n’ai pas réalisé que la commande Ubuntu était CTRL + SHIFT + C
ratskin

-1

Essayez Ctrl+ Alt+Backspace

Si vous utilisez Ubuntu 10.04, vous souhaitez activer cette clé.

Pour activer Control- Alt-Backspace

Aller au système -> Préférences -> Clavier

Sélectionnez l' onglet Dispositions et cliquez sur Options de présentation .

Sélectionnez Séquence de touches pour tuer le serveur X et activer Control+ Alt+Backspace .

Remarque:

En appuyant Ctrl- Alt- Backspaceredémarrera votre serveur X.


Edité la question pour qu'il soit clair que je veux tuer le processus depuis le terminal.
Olivier Lalonde
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.