Question Que faire lorsque Ctrl-C ne tue pas le travail en cours?


Parfois, les processus ignorent le signal SIGINT envoyé par Ctrl-C à 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, y a-t-il une séquence de touches qui toujours travailler (sans quitter le terminal)?


91
2017-11-20 11:47


origine




Réponses:


Envoyer le SIGQUIT signal avec Ctrl+\.

.. $ sleep 10
^\Quit

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

Il y a aussi un ensemble de Magic SysRq Raccourcis clavier. L'une des plus intéressantes est la suivante: Alt+SysRq+k. Il tue tous les processus de la console virtuelle actuelle. Si l'un de vos ttys est complètement et complètement cassé, cela peut être utilisé pour retourner. Sur le tty exécutant 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, il peut être appelé à l'aide de la touche Fn; C'est à dire. Alt → Fn → Imprimer → k dans cet ordre.

Voici quelques raccourcis de gestion de processus de base:

  • Ctrl+Z: faire une pause processus (plus bg reprendre en arrière-plan, fg pour monter au premier plan)
  • Ctrl+C: demander poliment au processus ferme maintenant
  • Ctrl+\: tuer sans pitié le processus qui est actuellement au premier plan
  • Alt+SysRq+s: Écrire des données sur le disque (toujours faire cela avant de tuer quelque chose d'important)
  • Alt+SysRq+s, k: tuer sans pitié tous les courants processus sur une console virtuelle donnée
  • Alt+SysRq+s, b: redémarrer sans pitié sans démonter,
  • Alt+SysRq+r, e, je, s, tu, b: Sans encombre reboot even jef le system est tutterly bRoken,

Remarque: Ctrl+Z, contrairement à Ctrl+C et Ctrl+\, travaille également pour man, vi, less, etc.

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 indique bien sûr que Ctrl+Z a été pressé


Pour un aperçu plus détaillé des coques et des terminaux, consultez également mes réponses sur:


124
2017-11-20 12:07



Fonctionne pour "sleep 10" mais ne fonctionne toujours pas pour "man" ou "vi". De toute évidence, "kill -9 pid" fonctionne pour tuer les deux processus. Est-ce que je manque quelque chose? - Olivier Lalonde
Ctrl + Z travaille avec des choses comme moins, l'homme, vi et ainsi de suite. Vous pouvez alors les tuer en faisant un ps pour voir leur identifiant de processus et les tuer en utilisant kill pid ou, si vous ne vous souciez pas des autres instances du programme, killall vi. Dans tous les cas, Ctrl-Z semble toujours fonctionner. - Stefano Palazzo♦
Vous pouvez aussi faire kill %% pour tuer le dernier emploi et kill %5 où 5 est le numéro de poste indiqué dans jobs. - Olivier Lalonde
Ctrl- \ envoie un SIGQUIT, pas un SIGKILL. Il existe des différences importantes entre SIGQUIT et SIGKILL. en.wikipedia.org/wiki/SIGQUIT - Juliano
Il n'y a pas de limitation au fait que les programmes exécutés dans l'espace utilisateur doivent respecter SIGQUIT. C- \ ne pas "tuer sans pitié le processus qui est actuellement au premier plan" pas plus que C-c, les deux sont trappables. - Chris Down


Tu peux essayer Ctrl+\


11
2017-11-20 12:06



Ne travaille pas avec l'un ou l'autre man ou vi. - Hippo
ubuntu travaillé 16.04 - kRazzy R


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

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


8
2017-11-20 20:18





  • Essayez l'un de ces:

    Ctrl+4

    Ctrl+\


  • Ou:

    Ctrl+Z puis lancez:

    kill %1

%1 est le nombre d'emplois qui a été retourné lorsque vous avez appuyé sur Contrôle-Z. Ajouter -9 pour forcer le meurtre.


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

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

Note: Quand des clés magiques SysRq sont utilisées pour tuer un graphique gelé   programme, le programme n'a aucune chance de restaurer le mode texte. Cela peut faire   tout illisible.

Voir: Touche Magic SysRq et ses combinaisons de commandes.


4
2017-10-01 11:47





Quitter de homme, utilisation q Partir vi utilisation :q


3
2017-11-20 22:46





Essayer Ctrl+Alt+Retour arrière 

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

Autoriser Contrôle-Alt-Retour arrière

Goto System -> Preferences -> Clavier

Sélectionnez le Onglet Mises en page et cliquez sur le Options de mise en page.

Sélectionner Séquence de touches pour tuer le serveur X et permettre Contrôle + Alt +Retour arrière.

Remarque:

Pressage Ctrl-Alt-Retour arrière redémarrera votre serveur X.


-1
2017-11-20 11:56



Édité la question pour préciser que je veux tuer le processus depuis le terminal. - Olivier Lalonde


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

CTRL+DÉCALAGE+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 par CTRL+DÉCALAGE+C.


-2
2017-11-20 19:36



Changer le raccourci de copie est sans importance pour forcer la fin du processus! - SuB
Pouvez-vous s'il vous plaît développer un peu votre réponse? Etape par étape serait idéal, principalement pour que le PO puisse suivre votre suggestion. :) - ThatGuy