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?

Code-Vervollständigung
quelle
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.
Gordon Davisson
quelle
5

Verwenden Sie Activity Monitor.

Applications-> Utilities->Activity Monitor

Gadgetmo
quelle
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.

gagneet
quelle
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.

Nevin Williams
quelle
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
mikeyy
quelle