Comment trouver et arrêter un processus sur un Mac

11

Comment puis-je trouver l'ID de processus et arrêter le processus en cours d'exécution sur le port 8080 sur un Mac?

Sur Ubuntu, cela fonctionne:

ps -aux

et je peux trouver le processus et exécuter:

kill -9 pid

ps -aux ne semble pas fonctionner, comment faire sur Mac OS X Lion?

codecompleting
la source
3
Non. Non. S'il vous plaît, s'il vous plaît, veuillez ne pas utiliser kill -9 pidavant d'avoir essayé kill pid. De nombreux processus auront des gestionnaires de signaux qui nettoieront leur utilisation des ressources, fermeront proprement les connexions et autres tâches de pré-arrêt. Si vous tuez avec -9, le processus meurt immédiatement sans faire le nettoyage. Tuer sans -9 fonctionnera la plupart du temps.
Doug Harris

Réponses:

16

Pour des raisons historiques, psles options de sont un gâchis emmêlé et incohérent. Sur OS X Lion, l'un de ces éléments devrait fonctionner:

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

Je n'ai pas de boîte Ubuntu à portée de main, mais selon la page de manuel , ce ps -auxn'est pas non plus la bonne façon de le faire:

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
la source
5

Utilisez Activity Monitor.

Applications-> Utilities->Activity Monitor

gadgetmo
la source
5

Si vous souhaitez rechercher et tuer tous les processus conformes à une chaîne, vous pouvez également utiliser les éléments suivants sur un Mac OSX:

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

Fondamentalement, cela permettra de trouver (grep) tous les processus en cours d'exécution sur votre système correspondant à, AWK obtient le PID, qui dans la commande PS est la deuxième colonne et la dernière prend les arguments d'AWK et tue le processus.

Utilisez SUDO, uniquement si l'utilisateur actuel n'a pas certains droits pour tuer un processus et si vous avez un accès SUDO sur votre système.

gagneet
la source
3

Je crois que ps -efsur Mac est presque équivalent à ps -auxLinux.

Pour obtenir le PID dont le port 8080 est utilisé: lsof -P | grep 8080

Les champs correspondent à:

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

J'ai démarré ttcp -rsqui écoute sur le port 5001.

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

et en effet, le PID 27999 correspond au PID du ttcpprocessus que j'ai lancé.

Nevin Williams
la source
1
Vous pouvez également utiliser ps aux(sans le tiret) sur OS X. ps -efcomprend différentes colonnes et utilise un format différent.
Lri
Il se trouve que je n'ai pas actuellement de connexion Linux à comparer; Il y a des années, IIRC, si -aux ne donnait pas la sortie attendue sur une saveur particulière d'Unix, alors -ef le ferait ... AIX, Linux, SunOS utilisaient -aux, BSD, Solaris avait besoin de -ef pour la compatibilité; J'oublie si IRIX était -aux ou -ef. Je ne me souviens pas quelle était la principale différence dans les systèmes respectifs ...
Nevin Williams
Les aux et OS d'OS X et aux et d'Ubuntu utilisent le même format, mais -aux d'Ubuntu affiche un avertissement au début.
Lri
1
Ahha ... Le partage était entre les implémentations SysV et BSD.
Nevin Williams
1

Pour rester à jour, pour macOS:

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

Pour Linux:

ps -ax | grep python | awk '{print "sudo kill -9",  $1}' | sh
mikeyy
la source