Comment tuer un processus Windows dans un terminal cygwin?


18

J'ai un problème avec la façon de tuer un processus dans Cygwin sous Windows. Je suis complètement nouveau chez Cygwin. Mais j'ai une tâche que je ne peux tout simplement pas tuer. J'ai essayé d'émettre les commandes suivantes:

kill 4568
kill -9 4568
/bin/kill -f 4568

J'ai émis les commandes dans un terminal Cygwin séparé, car je ne peux pas le faire Ctrl + C dans le terminal Cygwin où le processus s'exécute. J'ai cherché partout sur Internet sans succès.


Quel est le processus que vous avez commencé et comment l'avez-vous commencé?
me_and

Réponses:


25
ps -W | awk '/calc.exe/,NF=1' | xargs kill -f

Ou

ps -W | awk '$0~v,NF=1' v=calc.exe | xargs kill -f

Ou

powershell kill -n calc

Vous voudrez peut-être utiliser ps -W | awk 'BEGIN{ IGNORECASE=1;} /calc.exe/,NF=1' | xargs kill -fcar Windows ne
respecte pas la

7

Vous pouvez essayer:

taskkill /pid 4568

taskkill /im:{name-of-executable}est utile aussi.
LawrenceC

et taskkill /im <name-of-exe> /fest encore plus utile.
Erik Allik

1
Mauvaise réponse, l'OP a demandé une commande Cygwin.
Hashim

1
C'est taskkill //im <name-of-exe>(notez la nécessité de 2 barres obliques)
P.Brian.Mackey

4

Si vous voulez une solution uniquement BASH, essayez ceci: (cela fonctionne pour moi)

    KILLPS="<My Process Name>"
    WINPS=`ps -W | grep -i $KILLPS`         # Make case-insensitive.
    PID=`echo $WINPS | cut -d' ' -f1` 
    /bin/kill -f "$PID"

REMARQUE: utilisez / bin / kill, la suppression dans le shell incorporé ne supprimera pas les PID pour les processus Windows généraux.


Votre note à propos de / bin / kill vs shell kill était très utile. Merci
Phil

2

(De ma réponse à une question similaire sur SO ):

Différents programmes Windows gèrent les signaux qui tuent les envois différemment. ils n'ont jamais été conçus pour les traiter de la même manière que les programmes Linux / Cygwin.

La seule méthode fiable pour tuer un programme Windows consiste à utiliser un outil spécifique à Windows, tel que Task Manager ou Process Explorer.

Cela dit, si vous ne l’avez pas déjà fait, vous pourrez peut-être utiliser votre terminal Cygwin en mode administrateur (cliquez avec le bouton droit de la souris sur votre raccourci et sélectionnez "Exécuter en tant qu’administrateur").


1

Deux choses à considérer ici:

  1. Obtenez le bon PID, qui est le WINPID.
  2. Utilisez le bon outil.

Pour que le WINPID correct tue, utilisez cat /proc/<PID>/winpid. C'est à dire ça:

ZID=$$; WINPID=$(cat /proc/${ZID}/winpid); echo "Kill WINPID: ${WINPID}"; ps; sleep 10 &

et immédiatement après faire un autre ps.

Le bon outil à utiliser est sysinternals, PsKill64.exe -t <winpid> qui tue également tous les descendants du processus de script, ce qui killn'est pas le cas.


1
Vous avez un vote pour cat /proc/${ZID}/winpid, très bon à savoir. Et plus rapide que la solution avec ps -aW | grep ..., au moins sur mon cygwin sous Win 7 x64. Mais pour PsKill64, je pense que vous devez -tsupprimer les sous-processus et que vous taskkillpouvez également supprimer les sous-processus.
244an

Oui, vous devez aussi -tpouvoir tuer les descendants. Réponse corrigée.
not2qubit

0

Si vous avez un programme Windows qui est un sous-processus sous un processus cygwin bash, vous pouvez l’utiliser taskkill /F /PID [the cygwin process id] /Tpour supprimer l’arborescence des processus. Il n’est pas nécessaire d’obtenir le PID de Windows psavec awketc.
Ceci est testé sous Win7 x64.

# Simple example in cygwin:
> notepad.exe &
> pid=$!
...
> taskkill /F /PID $pid /T

Bien sûr, vous pouvez également utiliser le PID de fenêtre.


0

Dans Git Bash, j'utilise:

targetProcess='chromedriver.exe';
ps -W | grep -i ${targetProcess} | awk '{print $1}' | while read pid; do taskkill //PID ${pid}; done;

Je ne l'ai pas essayé dans Cygwin, mais je suppose que cela fonctionnera également là-bas.

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.