213 votes

Que faire quand Ctrl + C ne peut pas tuer un processus ?

Ctrl + C ne fonctionne pas toujours pour tuer le processus en cours (par exemple, si ce processus est occupé par certaines opérations réseau). Dans ce cas, vous voyez juste "^C" à côté de votre curseur et ne pouvez pas faire grand chose d'autre.

Quel est le moyen le plus simple de forcer ce processus à mourir maintenant sans perdre mon terminal ?

Résumé des réponses : En général, vous pouvez Ctrl + Z pour mettre le processus en veille, et ensuite faire kill -9 _process-pid_ où vous trouvez le pid du processus avec ps et d'autres outils. Sur Bash (et éventuellement d'autres shells), vous pouvez faire kill -9 %1 (ou '%N' en général), ce qui est plus facile. Si Ctrl + Z ne fonctionne pas, vous devrez ouvrir un autre terminal et tuer à partir de là.

146voto

akira Points 58339

Pour comprendre le problème du pourquoi Ctrl + C ne fonctionne pas, il est très utile de comprendre ce qui se passe lorsque vous appuyez dessus :

La plupart des coquilles se lient Ctrl + C pour "envoyer un SIGINT au programme qui s'exécute actuellement au premier plan". Vous pouvez vous informer sur les différents signaux via signal humain :

 SIGINT        2       Term    Interrupt from keyboard

Les programmes peuvent ignorer ce signal, comme ils peuvent ignorer SIGTSTP également :

 SIGTSTP   18,20,24    Stop    Stop typed at tty

(C'est ce que font la plupart des coquilles quand vous appuyez sur Ctrl + Z c'est pourquoi son fonctionnement n'est pas garanti).

Il existe des signaux qui ne peuvent être ignorés par le processus : SIGKILL , SIGSTOP et d'autres encore. Vous pouvez envoyer ces signaux via le tuer commande. Donc, pour tuer votre processus suspendu / zombie, il suffit de trouver la commande identification du processus (PID). Par exemple, utilisez pgrep ou ps et ensuite kill il :

 % kill -9 PID

47voto

RoboAlex Points 571

Voir ceci enlace également.

Ctrl + Z : mettre en pause un processus.

Ctrl + C : demander poliment au processus de s'arrêter maintenant.

Ctrl + \ : tuer impitoyablement le processus qui est actuellement au premier plan.

34voto

Daniel Beck Points 105590

Appuyez sur Ctrl-Z pour suspendre le programme et le mettre en arrière-plan :

Suspend the program currently running and put it in the background.
This does not stop the process as it does in VMS!

(Revenir au premier plan en utilisant fg )

Ensuite, vous pouvez kill ou kill -9 en fonction de son identifiant de processus (que vous obtenez à partir de ps a ).

13voto

Cristian Sitov Points 71

En général, vous pouvez toujours arrêter le processus ( Ctrl + Z ) et utiliser ensuite kill -9 . Pour kill -9 vous avez besoin de la PID du processus d'abord. Pour les travaux de fond, kill -9 %1 est le moyen le plus simple de le faire - si vous n'êtes pas sûr du nombre de tâches d'arrière-plan que vous voulez tuer, exécutez la commande suivante jobs .

Alternativement, vous pouvez trouver l'ID du processus avec

ps

Ensuite, vous pouvez exécuter

kill -9 <Appropriate PID from ps output>

5voto

Dustin Boswell Points 2231

Une solution plus simple pour Bash (et autres shells ?) est de faire :

Ctrl-z      followed by     kill -9 %1

où "%1" fait référence au numéro de la tâche à tuer. Cela peut être '%2' (ou autre chose) si vous avez déjà d'autres tâches en sommeil. Vous pouvez voir de quel numéro de tâche il s'agit en appuyant sur Ctrl-z :

[1]+  Stopped                 <process name>

Notez que 'kill' est la version de Shell de kill, et non /bin/kill.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X