Como encontrar e parar um processo em um Mac


11

Como posso encontrar a identificação do processo e interromper o processo em execução na porta 8080 em um Mac?

No Ubuntu, isso funciona:

ps -aux

e eu posso encontrar o processo e executar:

kill -9 pid

ps -aux pareceu não funcionar, como posso fazer isso no Mac OS X Lion?



3
Não. Não. Não. Por favor, por favor, não use kill -9 pidaté depois de tentar apenas kill pid. Muitos processos terão manipuladores de sinal que limparão o uso de recursos, fecharão bem as conexões e outras tarefas de pré-desligamento. Se você mata com -9, o processo morre imediatamente sem fazer a limpeza. Matar sem -9 funcionará na maioria das vezes.
Doug Harris

Respostas:


16

Por razões históricas, psas opções são uma bagunça emaranhada e inconsistente. No OS X Lion, qualquer um destes deve funcionar:

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

Eu não tenho uma caixa do ubuntu à mão para testar, mas de acordo com a página de manual , ps -auxtambém não é a maneira certa de fazê-lo:

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 você deseja localizar e eliminar todos os processos que estejam em conformidade com uma string, também pode usar o seguinte em um Mac OSX:

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

Basicamente, o que isso fará é encontrar (grep) todos os processos atualmente em execução no seu sistema que correspondem ao AWK, obtém o PID, que no comando PS é a segunda coluna e o último pega os argumentos do AWK e mata os processos.

Use SUDO, apenas se o usuário atual não tiver alguns direitos para interromper um processo e se você tiver acesso SUDO no seu sistema.


3

Eu acredito que ps -efno Mac é quase equivalente ao ps -auxLinux.

Para obter o que o PID possui a porta 8080 em uso: lsof -P | grep 8080

Os campos são mapeados para:

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

Eu iniciei o ttcp -rsque escuta na porta 5001.

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

e, de fato, o PID 27999 corresponde ao PID do ttcpprocesso que lancei.


1
Você também pode usar ps aux(sem o hífen) no OS X. ps -efinclui colunas diferentes e usa um formato diferente.
Lri

Por acaso não tenho atualmente um login linux para comparar; Anos atrás, IIRC, se -aux não fornecesse a saída esperada em um sabor específico de unix, então -ef daria ... AIX, Linux, SunOS usava -aux, BSD, Solaris precisava de -ef para compatibilidade; Eu esqueço se o IRIX era -aux ou -ef. Não me lembro o que a grande diferença entre os respectivos sistemas eram ...
Nevin Williams

O aux do OS X e o aux e -aux do Ubuntu usam o mesmo formato, mas o -aux do Ubuntu imprime um aviso no início.
Lri

1
Ahha ... A divisão foi entre as implementações SysV e BSD.
Nevin Williams

1

Para manter-se atualizado, para o 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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.