Cómo encontrar y detener un proceso en una Mac

11

¿Cómo puedo encontrar la identificación del proceso y detener el proceso que se ejecuta en el puerto 8080 en una Mac?

En Ubuntu esto funciona:

ps -aux

y puedo encontrar el proceso y ejecutar:

kill -9 pid

ps -aux no parece funcionar, ¿cómo puedo hacer esto en Mac OS X Lion?

código completo
fuente
3
No. No. No. Por favor, por favor, no lo use kill -9 pidhasta después de haberlo intentado kill pid. Muchos procesos tendrán manejadores de señales que limpiarán su uso de recursos, cerrarán conexiones y otras tareas previas al apagado. Si matas con -9, el proceso muere inmediatamente sin hacer la limpieza. Matar sin -9 funcionará la mayor parte del tiempo.
Doug Harris

Respuestas:

16

Por razones históricas, pslas opciones son un desastre enredado e inconsistente. En OS X Lion, cualquiera de estos debería funcionar:

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

No tengo una caja de ubuntu a mano para probar, pero de acuerdo con la página del manual , ps -auxtampoco es la forma correcta de hacerlo:

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
fuente
5

Si desea encontrar y eliminar todos los procesos que se ajustan a una cadena, también puede usar lo siguiente en un Mac OSX:

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

Básicamente, lo que esto hará es que encontrará (grep) todos los procesos que se ejecutan actualmente en su sistema que coinciden con, AWK obtiene el PID, que en el comando PS es la segunda columna y la última toma los argumentos de AWK y mata al procesos.

Use SUDO, solo si el usuario actual no tiene algunos derechos para matar un proceso y si tiene acceso SUDO en su sistema.

gagneet
fuente
3

Creo que ps -efen Mac es casi equivalente a ps -auxen Linux.

Para obtener qué PID tiene el puerto 8080 en uso: lsof -P | grep 8080

Los campos se asignan a:

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

Empecé, ttcp -rsque escucha en el puerto 5001.

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

y de hecho, el PID 27999 corresponde al PID del ttcpproceso que lancé .

Nevin Williams
fuente
1
También puede usar ps aux(sin el guión) en OS X. ps -efincluye diferentes columnas y usa un formato diferente.
Lri
Actualmente no tengo un inicio de sesión de Linux para comparar; Hace años, IIRC, si -aux no daba el resultado esperado en un sabor particular de Unix, entonces -ef ... AIX, Linux, SunOS usaba -aux, BSD, Solaris necesitaba -ef por compatibilidad; Olvidé si IRIX era -aux o -ef. No recuerdo cuál fue la principal diferencia en los respectivos sistemas ...
Nevin Williams
Los auxiliares de OS X y los auxiliares y -aux de Ubuntu usan el mismo formato, pero el -aux de Ubuntu imprime una advertencia al comienzo.
Lri
1
Ahha ... La división fue entre implementaciones SysV y BSD.
Nevin Williams
1

Para mantenerse actualizado, para macOS:

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

Para Linux:

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