it-swarm.com.de

Wie kann ich einen Prozess mit Namen anstelle von PID beenden?

Manchmal, wenn ich versuche, Firefox zu starten, wird "ein Firefox-Prozess wird bereits ausgeführt". Also muss ich das machen:

[email protected]:~$ 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
[email protected]:~$ kill 7451

Was ich möchte, ist ein Befehl, der das alles für mich erledigt. Es würde eine Eingabezeichenfolge und grep dafür (oder was auch immer) in der Liste der Prozesse nehmen und würde alle Prozesse in der Ausgabe beenden:

[email protected]:~$ killbyname firefox

Ich habe es in PHP versucht, aber exec('ps aux') scheint nur Prozesse anzuzeigen, die mit exec() im PHP-Skript selbst ausgeführt wurden (so) der einzige Prozess, den es zeigt, ist sich selbst.)

311
Jeremy Ruten
pkill firefox

Weitere Informationen: http://linux.about.com/library/cmd/blcmdl1_pkill.htm

463
shoosh

Auch möglich zu verwenden:

pkill -f "Process name".

Für mich hat es perfekt geklappt. Es war das, wonach ich gesucht habe. pkill funktioniert nicht mit Namen ohne die Flagge.

Wann -f gesetzt ist, wird die vollständige Befehlszeile für den Mustervergleich verwendet.

89
Victor

Sie können Prozesse durch name mit killall <name> beenden

killall sendet ein Signal an alle Prozesse, die einen der angegebenen Befehle ausführen. Wird kein Signalname angegeben, wird SIGTERM gesendet.

Signale können entweder mit Namen angegeben werden (zB - HUP oder - SIGHUP ) oder nach Nummer (zB - 1 ) oder nach Option - s .

Wenn der Befehlsname kein regulärer Ausdruck ist (Option - r ) und einen Schrägstrich (/) enthält, werden Prozesse, die diese bestimmte Datei ausführen, zum Beenden ausgewählt. unabhängig von ihrem Namen.

Aber wenn Sie den Vorgang mit ps aux Nicht sehen, werden Sie wahrscheinlich nicht das Recht haben, ihn zu töten ...

63
Andre Bossard

Eine etwas längere Alternative:

kill `pidof firefox`
42
Walter

Am einfachsten überprüfen Sie zuerst, ob Sie die richtigen Prozess-IDs erhalten:

pgrep -f [part_of_a_command]

Wenn das Ergebnis wie erwartet ist. Geh mit:

pkill -f [part_of_a_command]
20
Tahsin Turkoz

Seltsam, aber ich habe die Lösung nicht so gesehen:

kill -9 `pidof firefox`

es kann auch mehrere Prozesse (mehrere Pids) abbrechen wie:

kill -9 `pgrep firefox`

Ich bevorzuge pidof, da es eine einzeilige Ausgabe hat:

> pgrep firefox
6316
6565
> pidof firefox
6565 6316
18
prosti

Auf dem Mac konnte ich weder pgrep noch pkill finden, noch funktionierte killall. Deshalb schrieb ich ein einfaches Einzeiler-Skript:

export pid=`ps | grep process_name | awk 'NR==1{print $1}' | cut -d' ' -f1`;kill $pid

Wenn es einen einfacheren Weg gibt, teilen Sie uns dies bitte mit.

11
Dhiraj

Alle Prozesse mit snippet im Startpfad beenden. Sie können alle Apps beenden, die aus einem bestimmten Verzeichnis gestartet wurden, indem Sie/directory/als Snippet einfügen. Dies ist sehr nützlich, wenn Sie mehrere Komponenten für dieselbe Anwendung aus demselben Anwendungsverzeichnis starten.

ps ax | grep <snippet> | grep -v grep | awk '{print $1}' | xargs kill

* Ich würde pgrep vorziehen, wenn verfügbar

9

Mit #killall Befehl:

#killall -9 <processname>
9
user2396265

Mit grep töten:

kill -9 `pgrep myprocess`
6
edW

richtiger wäre:

export pid=`ps aux | grep process_name | awk 'NR==1{print $2}' | cut -d' ' -f1`;kill -9 $pid
5
Chadiso

Normalerweise benutze ich den killall Befehl siehe hier für Details.

4
Bittercoder

Ich habe mir die gleiche Frage gestellt, aber das Problem mit den aktuellen Antworten ist, dass sie nicht sichere Überprüfung der zu tötenden Prozesse also ... es könnte zu schrecklichen Fehlern führen:) ... besonders if mehrere Prozesse stimmen mit dem Muster überein.

Als Haftungsausschluss bin ich kein Sh-Profi und es gibt sicherlich Raum für Verbesserungen.

Also habe ich ein kleines sh-Skript geschrieben:

#!/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
3
Fab

Der Standardbefehl kill akzeptiert Befehlsnamen als Alternative zur PID. Siehe kill (1) . Ein häufig auftretendes Problem ist, dass bash ein eigenes kill bereitstellt, das Auftragsnummern wie kill %1, Jedoch keine Befehlsnamen akzeptiert. Dies behindert den Standardbefehl. Wenn die erstere Funktionalität für Sie nützlicher ist als die letztere, können Sie die bash -Version durch Aufrufen deaktivieren

enable -n kill

Weitere Informationen finden Sie in den Einträgen kill und enable in bash (1) .

2
The Vee

Wenn Sie GNOME ausführen, können Sie den Systemmonitor (System-> Administration-> System Monitor) verwenden, um Prozesse wie unter Windows abzubrechen. KDE wird etwas Ähnliches haben.

1
Bernard
ps aux | grep processname | cut -d' ' -f7 | xargs kill -9 $
0
query_port

awk oneliner, der die Kopfzeile von ps-Ausgaben analysiert, sodass Sie sich nicht um Spaltennummern (sondern um Spaltennamen) kümmern müssen. Unterstützung für Regex. Um beispielsweise alle Prozesse abzubrechen, deren ausführbarer Name (ohne Pfad) Word "Firefox" enthält, versuchen Sie es

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.*
0
Andrey Bochkov

kill -9 $ (ps aux | grep -e meinProzessname | awk '{print $ 2}')

0
Nived Thanima