Come trovare e interrompere un processo su un Mac


11

Come posso trovare l'id del processo e interrompere il processo in esecuzione sulla porta 8080 su un Mac?

Su Ubuntu funziona:

ps -aux

e posso trovare il processo ed eseguire:

kill -9 pid

ps -aux non sembra funzionare, come posso farlo su Mac OS X Lion?



3
No. No. No. Per favore, per favore, per favore non usare kill -9 pidfino a dopo aver provato solo kill pid. Molti processi avranno gestori di segnali che puliranno il loro uso delle risorse, chiuderanno in modo pulito connessioni e altre attività di pre-spegnimento. Se uccidi con -9, il processo si interrompe immediatamente senza eseguire la pulizia. Uccidere senza -9 funzionerà per la maggior parte del tempo.
Doug Harris,

Risposte:


16

Per ragioni storiche, psle opzioni sono un pasticcio intricato e incoerente. Su OS X Lion, uno di questi dovrebbe funzionare:

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

Non ho una Ubuntu Box a portata di mano per testare, ma secondo la pagina man , ps -auxnon è nemmeno il modo giusto per farlo lì:

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

Se desideri trovare ed eliminare tutti i processi conformi a una stringa, puoi anche utilizzare quanto segue su un Mac OSX:

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

Fondamentalmente ciò che farà è che troverà (grep) tutti i processi attualmente in esecuzione sul tuo sistema corrispondenti al, AWK ottiene il PID, che nel comando PS è la seconda colonna e l'ultimo prende gli argomenti da AWK e uccide il processi.

Utilizzare SUDO, solo se l'utente corrente non dispone di alcuni diritti per interrompere un processo e se si dispone dell'accesso SUDO sul proprio sistema.


3

Credo che ps -efsu Mac sia quasi equivalente a ps -auxsu Linux.

Per ottenere ciò che PID ha la porta 8080 in uso: lsof -P | grep 8080

I campi sono mappati a:

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

Ho avviato ttcp -rsche ascolta sulla porta 5001.

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

e in effetti, PID 27999 corrisponde al PID del ttcpprocesso che ho avviato.


1
Puoi anche usare ps aux(senza il trattino) su OS X. ps -efinclude colonne diverse e usa un formato diverso.
Lri,

Mi capita di non avere attualmente un login Linux da confrontare; Anni fa, IIRC, se -aux non forniva l'output atteso su un particolare sapore di unix, allora -ef avrebbe ... AIX, Linux, SunOS usato -aux, BSD, Solaris aveva bisogno di -ef per compatibilità; Dimentico se IRIX era -aux o -ef. Non ricordo quale fosse la differenza principale nei rispettivi sistemi ...
Nevin Williams,

Aux di OS X e aux e -aux di Ubuntu usano lo stesso formato, ma -aux di Ubuntu stampa un avviso all'inizio.
Lri,

1
Ahha ... La divisione era tra implementazioni SysV e BSD.
Nevin Williams,

1

Per rimanere aggiornato, per macOS:

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

Per Linux:

ps -ax | grep python | awk '{print "sudo kill -9",  $1}' | sh
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.