it-swarm.com.de

Wie finde ich die Prozess-ID (PID) eines laufenden Terminalprogramms?

Ich starte ein Programm im Terminal, mit dem ich nicht entkommen kann Ctrl-C und dass ich töten will. Wie finde ich die PID?

113
Jjed

Öffnen Sie ein anderes Terminal und führen Sie ps ax | grep foo aus, wobei foo der Name des nicht reagierenden Programms ist. Dies sollte eine Ausgabezeile zurückgeben, die ungefähr so ​​aussieht:

$ ps ax | grep firefox
2222 ?        S      0:00 /bin/sh /usr/lib/firefox-3.6.9/firefox
2231 ?        Sl   514:36 /usr/lib/firefox-3.6.9/firefox-bin
30290 pts/2    S+     0:00 grep --color=auto firefox

Das erste Feld jeder Ausgabezeile ist eine Zahl, die die Prozess-ID des Programms darstellt, die mit grep übereinstimmt (Sie können die letzte ignorieren, die grep selbst darstellt.

Gehen Sie wie folgt vor, um den fehlerhaften Prozess anzuhalten: kill pid Dabei ist pid die Prozess-ID des Programms. Sie müssen möglicherweise Ihr Urteil darüber treffen, welche der Übereinstimmungen killed sein müssen, oder Sie können top stattdessen verwenden. Wenn Sie kill für sich verwenden, wird SIGTERM gesendet, das Sie zuerst versuchen sollten, da es dem Programm ermöglicht, ordnungsgemäß nach sich aufzuräumen. Wenn SIGTERM fehlschlägt, versuchen Sie es mit SIGHUP, einem stärkeren Medikament: kill -HUP pid. Wenn alles andere fehlschlägt, senden Sie SIGKILL. Sie sollten dies jedoch nur als letzten Ausweg tun, da SIGKILL den Kernel dazu veranlasst, den Prozess sofort abzubrechen, ohne dass eine Bereinigung möglich ist. Dies kann manchmal zu Datenbeschädigungen oder anderen Problemen führen. Senden Sie SIGKILL also nur als letzten Ausweg. Führen Sie dazu kill -KILL pid oder kill -9 pid aus.

Wenn Sie eine grafische Benutzeroberfläche verwenden, müssen Sie sich natürlich nicht mit diesem verrückten Befehlszeilen-Zeugs herumschlagen, um die Arbeit zu erledigen. Öffnen Sie einfach "System Monitor", navigieren Sie zur Registerkarte "Prozesse", wählen Sie den Prozess aus, den Sie anhalten möchten (Hm, könnte dies der Prozess mit 90% CPU sein?), Und klicken Sie mit der rechten Maustaste darauf. Da der Prozess bereits gestoppt ist (das ist das Problem, oder?), Wählen Sie im daraufhin angezeigten Menü Prozess beenden oder Prozess beenden.

Gutschrift auf koanhead

127
Jjed

Ich glaube nicht, dass so lange Befehle erforderlich sind, wenn Sie dieselben Befehle mit pgrep, pkill, pidof usw. ausführen können.

  • Um die PID eines Running-Programms zu erhalten

pgrep:

   pgrep [options] pattern

DESCRIPTION: pgrep durchsucht die aktuell ausgeführten Prozesse und listet die Prozess-IDs auf, die den Auswahlkriterien für stdout entsprechen. Alle Kriterien müssen übereinstimmen. Zum Beispiel,

  • Um den Prozess sshd zu finden, der root gehört.

    $ pgrep -u root sshd
    
  • Listen Sie die Prozesse auf, die dem Daemon root OR gehören.

    $ pgrep -u root,daemon
    

pidof:

DESCRIPTION:

Pidof findet die Prozess-IDs (Pids) der genannten Programme. Diese IDs werden auf der Standardausgabe gedruckt.

Syntax: pidof program_name

  • Um ein Programm mit pid zu beenden, verwenden Sie das Beispiel pkill:

    pkill pid    
    pkill -f process_name    
    pkill -o process_name    
    pkill -n process_name    
    pkill -l process_name
    

    -f Flag: Sucht den Prozessnamen (siehe man pkill)
    -o Flag: Wählen Sie nur den ältesten der übereinstimmenden Prozesse aus.
    -n Flag: Wählen Sie nur den neuesten der übereinstimmenden Prozesse aus.
    -l Flag: Listet den Prozessnamen sowie die Prozess-ID auf.

46

Der einfachste Weg, die PID eines laufenden Programms zu ermitteln, ist:

pidof <application name>

Zum Beispiel, wenn Sie vim gestartet haben und dessen pid wissen wollen:

pidof vim

Denken Sie daran, dass Sie den genauen Programmnamen angeben müssen, der gestartet wurde.

Wenn Sie beispielsweise vi ausführen und pidof vim ausführen, erhalten Sie keine korrekten Ergebnisse.

Weitere Informationen finden Sie auf der Manualpage von pidof.

20
jobin

Ich habe festgestellt, dass es hilfreich ist, bei der Suche die Groß- und Kleinschreibung zu ignorieren, indem Sie das "-i" hinzufügen und "aux" anstelle von "ax" verwenden, um eine aussagekräftigere Ausgabe zu erhalten:

ps aux | grep -i firefox

Wenn Sie alle Prozesse beenden möchten, die Sie verwenden können:

ps aux | grep -i firefox | awk {'print $2'} | xargs kill -9

Das ist eine gewaltsame Tötung. Lass die "-9" fallen, wenn du einen Soft Kill willst.

18
John Foley

Wenn Sie nur die PID wollen (nützlich für Autokill-Skripte, etc ...)

pgrep -f desired_program_name
3
MikeL

Für diejenigen, die Ubuntu 16.04 LTS ausführen, verwenden Sie mussps ax und nicht nur ps am Kommandozeile, sonst bekommen Sie nur die Prozesse, die von der jeweiligen Terminal-Instanz kommen, in der Sie sich befinden. (normalerweise nur 'bash' (die Shell, in der Sie sich befinden) und 'ps' (was Sie gerade ausgeführt haben))

1
cygnus_x1
top

oder

screen -list|ls

liste alle pid mit dem entsprechenden prozess auf

kill -[pid]
0
Rakly3

Du könntest es tun:

ps ax | grep firefox | cut -f2 -d" " - | xargs kill -9

die ersten beiden Pipes erhalten Prozessinformationen. Als Nächstes versuchen wir, die PID-Spalte mithilfe des Old-School-Schnitts zu ermitteln. Anschließend geben wir die resultierende PID zum Töten an.

0
Arian Soltani

Sie können auch ein anderes Terminal öffnen (oder zu einem anderen Terminal wechseln) und top ausführen, bei dem es sich im Grunde um eine Textversion des Systemmonitors handelt. In der ersten Spalte wird die PID jedes laufenden Prozesses aufgeführt, den Sie durch Drücken von beenden können K, geben Sie die PID ein und geben Sie dann ein zu sendendes numerisches Signal ein.

0
Waldir Leoncio