web-dev-qa-db-fra.com

Comment tuer un processus dans cygwin?

Salut, j'ai le processus suivant que je ne peux pas tuer:

The process to be killed.

Je suis en cours d'exécution cygwin dans Windows XP 32 bits. 

J'ai essayé d'émettre les commandes suivantes:

/bin/kill -f 4760
/bin/kill -9 5000
kill -9 5000
kill 5000

Quand j'écris/bin/kill -f 4760, je reçois le message 'kill: impossible d'ouvrir le pid 4760'.

Quand j'écris/bin/kill -9 5000, je reçois le message 'kill: 5000: aucun processus de ce type'.

Je ne comprends tout simplement pas pourquoi ce processus ne peut pas être tué. Puisqu'il a un WINID, ne devrait-il pas être tué par/bin/kill -f 4760?

j'espère que quelqu'un peut aider thx :)

30
Diemauerdk

Le processus est probablement verrouillé par Windows. L'erreur que vous obtenez "Impossible d'ouvrir PID XXX" pointe vers ceci . Pour confirmer, essayez de le tuer avec windows taskkill. 

    taskkill /PID 4760
23
kjp

Étrangement, les travaux suivants dans Cygwin:

echo PID1 PID2 PID3 | xargs kill -f

Par exemple:

ps -W | grep WindowsPooPoo | awk '{print $1}' | while read line; do echo $line | xargs kill -f; done;
10
nino

Différents programmes Windows gèrent les signaux que kill envoie 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 sur votre raccourci et sélectionnez "Exécuter en tant qu’administrateur").

2
me_and

Créez un fichier appelé killall.sh avec cette ligne

ps -W | grep $1 | awk '{print $1}' | while read line; do echo $line | xargs kill -f; done;

Puis donnez-lui des autorisations d'exécution. 

chmod 777 killall.sh

Dans votre .bash_profile, ajoutez cette ligne

alias killall="~/killall.sh"   (point it to the correct location)

Ensuite, il vous suffit de taper "killall [nom]"

2
Rob Schlackman

La méthode présentée par @Donal Tobin est correcte: 

kill -f <pid>

Cependant, je n'ai pas besoin de me connecter en tant qu'administrateur.

1
Navid

killall.sh - Tue par nom de processus.

#/bin/bash
ps -W | grep "$1" | awk '{print $1}' | xargs kill -f;

Usage:

$ killall <process name>
0
Tony O'Hagan