Как найти и остановить процесс на Mac

11

Как я могу найти идентификатор процесса и остановить процесс, работающий на порте 8080 на Mac?

На Ubuntu это работает:

ps -aux

и я могу найти процесс и запустить:

kill -9 pid

ps -aux не похоже на работу, как я могу сделать это на Mac OS X Lion?

codecompleting
источник
3
Нет. Нет. Пожалуйста, пожалуйста, пожалуйста, не используйте, kill -9 pidпока не попробуете kill pid. Многие процессы будут иметь обработчики сигналов, которые очистят их использование ресурсов, аккуратно закроют соединения и другие задачи перед завершением работы. Если вы убьете с -9, процесс немедленно прекратит свою работу без очистки. Убийство без -9 будет работать большую часть времени.
Даг Харрис

Ответы:

16

По историческим причинам, psварианты - запутанный и противоречивый беспорядок. На OS X Lion любой из них должен работать:

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

У меня нет Ubuntu Box, удобного для тестирования, но, согласно man-странице , ps -auxтам тоже нет правильного способа сделать это:

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

Если вы хотите найти и уничтожить все процессы, которые соответствуют строке, вы также можете использовать следующее на Mac OSX:

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

По сути, это то, что он найдет (grep) все процессы, запущенные в настоящее время в вашей системе, в соответствии с AWK получает PID, который в команде PS является вторым столбцом, а последний принимает аргументы из AWK и убивает процессы.

Используйте SUDO, только если текущий пользователь не имеет каких-либо прав на удаление процесса и если у вас есть доступ к SUDO в вашей системе.

gagneet
источник
3

Я считаю, что ps -efна Mac это почти эквивалентно ps -auxна Linux.

Чтобы узнать, какой PID использует порт 8080: lsof -P | grep 8080

Поля отображаются на:

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

Я запустил, ttcp -rsкоторый слушает на порт 5001.

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

и действительно, PID 27999 соответствует PID ttcpпроцесса, который я запустил.

Невин Уильямс
источник
1
Вы также можете использовать ps aux(без черты) на OS X. ps -efвключает в себя разные столбцы и использует другой формат.
Lri
Я случайно не могу войти в систему под Linux; Несколько лет назад, IIRC, если -aux не дал ожидаемый результат для определенного вида unix, тогда -ef ... AIX, Linux, SunOS использовали -aux, BSD, Solaris нужен -ef для совместимости; Я забыл, если IRIX был -aux или -ef. Я не помню, в чем было основное различие в соответствующих системах ...
Невин Уильямс
Aux в OS X и aux и -aux в Ubuntu используют один и тот же формат, но в начале Ubuntu -aux выводит предупреждение.
Лри
1
Ага ... Раскол был между реализациями SysV и BSD.
Невин Уильямс
1

Чтобы оставаться в курсе, для macOS:

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

Для Linux:

ps -ax | grep python | awk '{print "sudo kill -9",  $1}' | sh
mikeyy
источник