So finden und stoppen Sie einen Prozess auf einem Mac


11

Wie kann ich die Prozess-ID finden und den Prozess stoppen, der auf Port 8080 auf einem Mac ausgeführt wird?

Unter Ubuntu funktioniert dies:

ps -aux

und ich kann den Prozess finden und ausführen:

kill -9 pid

ps -aux schien nicht zu funktionieren, wie kann ich das unter Mac OS X Lion machen?



3
Nein, bitte, bitte, bitte, bitte erst verwenden, kill -9 pidnachdem Sie es gerade versucht haben kill pid. Viele Prozesse verfügen über Signalhandler, die den Ressourcenverbrauch bereinigen, Verbindungen sauber schließen und andere Aufgaben vor dem Herunterfahren ausführen. Wenn Sie mit -9 töten, stirbt der Prozess sofort ab, ohne die Bereinigung durchzuführen. Töten ohne -9 funktioniert die meiste Zeit.
Doug Harris

Antworten:


16

Aus historischen Gründen sind psdie Optionen ein Wirrwarr und inkonsistentes Durcheinander. Unter OS X Lion sollte Folgendes funktionieren:

ps -ax
ps -e
ps aux # this displays in a different format

Ich habe nicht ein Ubuntu zu testen handliche Box, sondern nach der man - Seite , ps -auxist nicht der richtige Weg , um es dort entweder zu tun:

Note that "ps -aux" is distinct from "ps aux". The POSIX and UNIX
standards require that "ps -aux" print all processes owned by a user
named "x", as well as printing all processes that would be selected by
the -a option. If the user named "x" does not exist, this ps may
interpret the command as "ps aux" instead and print a warning. This
behavior is intended to aid in transitioning old scripts and habits. It
is fragile, subject to change, and thus should not be relied upon.


5

Wenn Sie alle Prozesse suchen und beenden möchten, die einer Zeichenfolge entsprechen, können Sie unter Mac OS X auch Folgendes verwenden:

ps aux | grep <string> | awk '{print $1}' | <sudo> xargs kill -9

Grundsätzlich werden dadurch alle Prozesse auf Ihrem System gefunden (grep), die mit der übereinstimmen. AWK erhält die PID, die im PS-Befehl die zweite Spalte ist, und die letzte übernimmt die Argumente von AWK und beendet die Prozesse.

Verwenden Sie SUDO nur, wenn der aktuelle Benutzer keine Rechte zum Beenden eines Prozesses hat und wenn Sie SUDO-Zugriff auf Ihr System haben.


3

Ich glaube, ps -efauf Mac ist fast gleichbedeutend mit ps -auxLinux.

So ermitteln Sie, welche PID über Port 8080 verfügt: lsof -P | grep 8080

Die Felder sind wie folgt zugeordnet:

[mini-nevie:~] nevinwilliams% lsof -P | head -1
COMMAND     PID          USER   FD     TYPE             DEVICE  SIZE/OFF    NODE NAME

Ich habe gestartet, ttcp -rswas Port 5001 abhört.

mini-nevie:~] nevinwilliams% lsof -P | grep 5001
ttcp      27999 nevinwilliams    3u    IPv4 0xb70c1f66028d6961       0t0     TCP *:5001 (LISTEN)

und tatsächlich entspricht PID 27999 der PID des von ttcpmir gestarteten Prozesses.


1
Sie können auch ps aux(ohne Bindestrich) unter OS X verwenden. ps -efEnthält verschiedene Spalten und verwendet ein anderes Format.
Lri

Ich habe momentan kein Linux-Login zum Vergleichen. Vor Jahren, IIRC, wenn -aux nicht die erwartete Ausgabe für eine bestimmte Unix-Variante liefert, dann würde -ef ... AIX, Linux, SunOS verwendet -aux, BSD, Solaris benötigt -ef für die Kompatibilität; Ich vergesse, ob IRIX -aux oder -ef war. Ich erinnere mich nicht, was der Hauptunterschied in den jeweiligen Systemen war ...
Nevin Williams

OS X Aux und Ubuntus Aux und -aux verwenden dasselbe Format, aber Ubuntus -aux gibt zu Beginn eine Warnung aus.
Lri

1
Ahha ... Die Aufteilung erfolgte zwischen SysV- und BSD-Implementierungen.
Nevin Williams

1

Um auf dem neuesten Stand zu bleiben, für macOS:

ps -e | grep python | awk '{print "sudo kill -9",  $1}' | sh

Für Linux:

ps -ax | grep python | awk '{print "sudo kill -9",  $1}' | sh
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.