Parfois, lorsque j'essaie de démarrer Firefox, il est écrit "un processus Firefox est déjà en cours d'exécution". Donc je dois faire ceci:
jeremy@jeremy-desktop:~$ ps aux | grep firefox
jeremy 7451 25.0 27.4 170536 65680 ? Sl 22:39 1:18 /usr/lib/firefox-3.0.1/firefox
jeremy 7578 0.0 0.3 3004 768 pts/0 S+ 22:44 0:00 grep firefox
jeremy@jeremy-desktop:~$ kill 7451
Ce que j'aimerais, c'est une commande qui ferait tout ça pour moi. Cela prendrait une chaîne d'entrée et grep
pour cela (ou autre chose) dans la liste des processus, et tuerait tous les processus dans la sortie:
jeremy@jeremy-desktop:~$ killbyname firefox
J'ai essayé de le faire dans PHP mais exec('ps aux')
ne semble afficher que les processus exécutés avec exec()
dans le script PHP lui-même (le seul processus de traitement montre est lui-même.)
pkill firefox
Plus d'informations: http://linux.about.com/library/cmd/blcmdl1_pkill.htm
Aussi possible d'utiliser:
pkill -f "Process name"
.
Pour moi, ça a fonctionné parfaitement. C'était ce que je cherchais. pkill ne fonctionne pas avec name sans le drapeau.
Lorsque -f
est défini, la ligne de commande complète est utilisée pour la correspondance de modèle.
Vous pouvez tuer des processus par nom avec killall <name>
killall envoie un signal à tous les processus exécutant l'une des commandes spécifiées. Si aucun nom de signal n'est spécifié, SIGTERM est envoyé.
Les signaux peuvent être spécifiés soit par nom (par exemple - HUP ou - SIGHUP ) ou par numéro (par exemple - 1 ) ou par option - s .
Si le nom de la commande n'est pas une expression régulière (option - r ) et contient une barre oblique (/), les processus exécutant ce fichier particulier seront sélectionnés pour la suppression, indépendant de leur nom.
Mais si vous ne voyez pas le processus avec _ps aux
_, vous n'aurez probablement pas le droit de le tuer ...
Une alternative un peu plus longue:
kill `pidof firefox`
La meilleure façon de le faire est d’abord de vérifier que vous obtenez les bons ID de processus avec:
pgrep -f [part_of_a_command]
Si le résultat est comme prévu. Aller avec:
pkill -f [part_of_a_command]
Étrange, mais je n'ai pas vu la solution comme celle-ci:
kill -9 `pidof firefox`
il peut également tuer plusieurs processus (plusieurs pids) comme:
kill -9 `pgrep firefox`
Je préfère pidof
car il a une sortie ligne unique:
> pgrep firefox
6316
6565
> pidof firefox
6565 6316
Sur Mac, je ne pouvais pas trouver pgrep et pkill, ni killall ne fonctionnait donc j'ai écrit un script simple avec un liner: -
export pid=`ps | grep process_name | awk 'NR==1{print $1}' | cut -d' ' -f1`;kill $pid
S'il existe un moyen plus simple de le faire, partagez-le.
Supprimez tous les processus ayant snippet
dans le chemin de démarrage. Vous pouvez supprimer toutes les applications lancées à partir de certains répertoires en plaçant/directory/comme extrait. Ceci est très utile lorsque vous démarrez plusieurs composants pour la même application à partir du même répertoire d'application.
ps ax | grep <snippet> | grep -v grep | awk '{print $1}' | xargs kill
* Je préférerais pgrep si disponible
Utilisation de la commande #killall
:
#killall -9 <processname>
Pour tuer avec grep:
kill -9 `pgrep myprocess`
plus correct serait:
export pid=`ps aux | grep process_name | awk 'NR==1{print $2}' | cut -d' ' -f1`;kill -9 $pid
J'utilise normalement la commande killall voir ici pour plus de détails.
Je me posais la même question, mais le problème avec les réponses actuelles est qu’elles ne sont pas vérifier en toute sécurité les processus à tuer alors ... cela pourrait conduire à de terribles erreurs:) ... surtout si plusieurs processus correspondent au modèle.
En tant que clause de non-responsabilité, je ne suis pas un professionnel de la SH et il y a certainement matière à amélioration.
J'ai donc écrit un petit script sh:
#!/bin/sh
killables=$(ps aux | grep $1 | grep -v mykill | grep -v grep)
if [ ! "${killables}" = "" ]
then
echo "You are going to kill some process:"
echo "${killables}"
else
echo "No process with the pattern $1 found."
return
fi
echo -n "Is it ok?(Y/N)"
read input
if [ "$input" = "Y" ]
then
for pid in $(echo "${killables}" | awk '{print $2}')
do
echo killing $pid "..."
kill $pid
echo $pid killed
done
fi
La commande par défaut kill
accepte les noms de commande comme alternative au PID. Voir kill (1) . Un problème récurrent est que bash
fournit son propre kill
qui accepte des numéros de travail, tels que kill %1
, mais pas les noms de commande. Cela empêche la commande par défaut. Si la première fonctionnalité vous est plus utile que la dernière, vous pouvez désactiver la version bash
en appelant
enable -n kill
Pour plus d'informations, voir les entrées kill
et enable
dans bash (1) .
Si vous exécutez GNOME, vous pouvez utiliser le moniteur système (Système-> Administration-> Moniteur système) pour tuer les processus comme vous le feriez sous Windows. KDE aura quelque chose de similaire.
ps aux | grep processname | cut -d' ' -f7 | xargs kill -9 $
awk oneliner, qui analyse l'en-tête de la sortie ps
, vous n'avez donc pas à vous soucier des numéros de colonne (mais des noms de colonne). Soutenez regex. Par exemple, pour tuer tous les processus, quel nom d’exécutable (sans chemin) contient le mot "firefox", essayez
ps -fe | awk 'NR==1{for (i=1; i<=NF; i++) {if ($i=="COMMAND") Ncmd=i; else if ($i=="PID") Npid=i} if (!Ncmd || !Npid) {print "wrong or no header" > "/dev/stderr"; exit} }$Ncmd~"/"name"$"{print "killing "$Ncmd" with PID " $Npid; system("kill "$Npid)}' name=.*firefox.*
kill -9 $ (ps aux | grep -e nomprocessus | awk '{print $ 2}')