Ctrl+ Cne fonctionne pas toujours pour tuer le processus en cours (par exemple, si ce processus est occupé dans certaines opérations réseau). Dans ce cas, vous voyez simplement "^ C" à côté de votre curseur et vous 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:
Habituellement, vous pouvez Ctrl+ Zmettre le processus en veille, puis effectuez l'opération kill -9 _process-pid_
où vous trouvez le pid du processus avec ps et d'autres outils. Sur Bash (et éventuellement d'autres coquilles), vous pouvez faire kill -9 %1
(ou '% N' en général) ce qui est plus facile. Si Ctrl+ Zne fonctionne pas, vous devrez ouvrir un autre terminal et tuer à partir de là.
screen
serait une solution possible, vous permettant de créer une nouvelle fenêtre etkill
le processus à partir de là.Réponses:
Pour comprendre le problème de pourquoi Ctrl+ Cne fonctionne pas, il est très utile de comprendre ce qui se passe lorsque vous appuyez dessus:
La plupart des shells lient Ctrl+ Cpour "envoyer un signal SIGINT au programme actuellement exécuté au premier plan". Vous pouvez lire sur les différents signaux via le signal man :
Les programmes peuvent ignorer ce signal, tout comme SIGTSTP :
(C’est ce que font la plupart des coquillages lorsque vous appuyez sur Ctrl+ Z, ce qui explique pourquoi son fonctionnement n’est pas garanti.)
Certains processus ne peuvent être ignorés par le processus: SIGKILL , SIGSTOP et quelques autres. Vous pouvez envoyer ces signaux via la commande kill . Donc, pour mettre fin à votre processus de suspension / zombie, il suffit de trouver l’ ID de processus (PID). Par exemple, utilisez
pgrep
oups
puis ensuitekill
:la source
Z
). Dans ce cas, il ne peut plus gérer les signaux.)Si Ctrl+ C(SIGINT) ne fonctionne pas, essayez Ctrl+ \(SIGQUIT). Ensuite, essayez Ctrl+ Z(SIGTSTP). Si cela vous ramène à une invite du shell, utilisez
kill
l'identifiant du processus. (Par défaut , ce signal SIGTERM, que vous pouvez spécifier aveckill -TERM
. Dans certains coquillages, vous pouvez être en mesure d'utiliser%1
pour désigner le PID). Si cela ne fonctionne pas, passez à un autre terminal ou une session SSH et à fairekill
oukill -TERM
sur la ID de processus. En dernier recours , vous devriez le fairekill -KILL
,kill -9
c’est-à-dire qu’il ne donne au processus aucune chance d’abandonner proprement, de synchroniser ses fichiers ouverts, de supprimer ses fichiers temporaires, de fermer des connexions réseau, etc.la source
Appuyez sur Ctrl-Z pour suspendre le programme et le mettre en arrière-plan :
(Restaurez au premier plan à nouveau en utilisant
fg
)Ensuite, vous pouvez
kill
oukill -9
cela, compte tenu de son ID de processus (vous l’obtenez deps a
).la source
kill $!
, ainsi$!
qu’une variable spéciale contenant le pid du dernier programme en arrière-plan.bg
une fois avant que la variable obtienne une valeur.bg
être suspendu juste après Ctrl + Z.ps
sortie (oukillall
) est assez risqué si vous exécutez plusieurs processus portant le même nom.ps -e -o pid,command
fournira pid + arguments complets, pas seulement le nom du programme, mais encore une fois pourrait ne pas être suffisant pour discriminer. En revanche$!
est un coup sûr.ps a
mon système:27721 s000 T 0:00.09 top
combien d'T
instances suspendues ( , je pense) de la même commande (top
) avez-vous en cours d'exécution dans le même tty (s000
)?Voir ce lien aussi.
Ctrl+ Z: mettre en pause un processus.
Ctrl+ C: demander poliment au processus de fermer maintenant.
Ctrl+ \: tuer sans pitié le processus qui est actuellement au premier plan
la source
"ctrl"
+"\"
n'a pas fonctionné pour moiEn règle générale, vous pouvez toujours arrêter le processus ( Ctrl+ Z), puis l'utiliser
kill -9
. En effetkill -9
, vous avez d’abord besoin du PID du processus . Pour les tâches en arrière-plan, lekill -9 %1
moyen le plus simple est de le faire - exécutez-vous si vous ne savez pas quel est le nombre de tâches en arrière-plan que vous souhaitez supprimerjobs
.Vous pouvez également rechercher un ID de processus avec
Ensuite, vous pouvez courir
la source
Une solution plus simple pour Bash (et autres coques?) Est de faire:
où '% 1' fait référence au numéro de travail en cours de suppression. Il peut s'agir de '% 2' (ou de quelque chose d'autre) si d'autres travaux sont déjà en attente. Vous pouvez voir le numéro de travail lorsque vous appuyez sur Ctrl-z:
Notez que "kill" est la version de shell du shell, pas / bin / kill.
la source
1) Si vous êtes sur la console et en mode multi-utilisateur, vous pouvez appuyer sur CTRL-ALT-Fn et vous connecter sur un autre écran, utiliser
ps -ef | grep <myprocessname>
oupidof <myprocessname>
puis tuer le processus par son numéro d’identification.2) Si vous êtes connecté à distance, procédez de la même manière via une autre session de terminal.
Vous pouvez également simplifier un peu la vie en installant htop , une version plus polyvalente de top qui vous permet de supprimer de manière sélective les processus en cours. La plupart des distributions ont htop dans un repo.
3) si vous êtes juste bloqué dans une session SSH bloquée (sur un autre système, par exemple), essayez d’appuyer sur tilde (~), qui est la touche d'échappement, puis appuyez sur CTRL-Z pour revenir à la session hôte. peut tuer le processus ssh bloqué ou attendre son expiration, ce que la plupart des gens font après une période d’inactivité.
la source
Si vous utilisez tmux ou screen et si aucune des solutions ci-dessus ne fonctionne, vous pouvez toujours supprimer le volet
<prefix> x
, le processus est également supprimé.la source
Il y a peut-être un piège avec SIGINT (2) dans votre / etc / profile. Si c'est le cas, supprimez-le. Déconnectez-vous et reconnectez-vous et vous devriez être bon.
la source