Як знайти і зупинити процес на Mac


11

Як я можу знайти ідентифікатор процесу та зупинити процес, який працює на порту 8080 на Mac?

У Ubuntu це працює:

ps -aux

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

kill -9 pid

ps -aux здавалося, не працює, як це зробити на Mac OS X Lion?



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, але, згідно зі сторінкою 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 у вашій системі.


3

Я вважаю, що ps -efна Mac майже еквівалентно ps -auxLinux.

Щоб отримати те, що 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включає різні стовпці та використовує інший формат.
Лрі

У мене зараз немає даних для входу в Linux; Роки тому IIRC, якби -aux не давав очікуваного виходу на конкретний аромат unix, тоді -ef би ... AIX, Linux, SunOS використовували -aux, BSD, Solaris, потрібні -ef для сумісності; Я забуваю, якщо IRIX був -aux або -ef. Я не пам'ятаю, у чому полягала основна різниця у відповідних системах ...
Невін Вільямс

Aux OS-X і Ubuntu-aux і -aux використовують однаковий формат, але -aux Ubuntu друкує попередження на початку.
Лрі

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.