Як убити процес у MacOS?


77

Я спробував, kill -9 698але процес не вмер.

$ ps -ef | grep chromium
  502   698   811   0   0:01.24 ??         0:07.28 /Users/lucius/chromium/src/xcodebuild/Debug/Chromium.app/Contents/MacOS/Chromium
  502   854   732   0   0:00.00 ttys001    0:00.00 grep chromium
$ kill -9 698


$ ps -ef | grep chromium
  502   698   811   0   0:01.24 ??         0:07.28 /Users/lucius/chromium/src/xcodebuild/Debug/Chromium.app/Contents/MacOS/Chromium
  502   854   732   0   0:00.00 ttys001    0:00.00 grep chromium

1
Чи не є гарною практикою спочатку виконати, kill -15 ...і якщо це не спрацює тоді, kill -1 ...а якщо це не спрацює тоді kill -9 ...?
waxwing

Відповіді:


130

Якщо ви намагаєтеся вбити -9, у вас правильний PID, і нічого не відбувається, тоді у вас немає дозволів на вбивство процесу.

Рішення:

$ sudo kill -9 PID

Добре, звичайно, Mac OS / X видає повідомлення про помилку в цьому випадку:

$ kill -9 196
-bash: kill: (196) - Operation not permitted

Отже, якщо ви не отримуєте повідомлення про помилку, ви якось не отримуєте правильний PID.


Може бути правильно, але, схоже, я згадую, як kill видав повідомлення про помилку, якщо процес не належав вбивці.
paxdiablo

Боже, це одна з тих форм поведінки, яка відрізняється від UNIX до UNIX. Бажано не мати цієї помилки, оскільки це прихований канал; з іншого боку, це корисне повідомлення про помилку.
Чарлі Мартін,

Який UNIX тут не дає помилок? Я протестував BSD, Linux та Solaris, і всі вони дають певну форму вищезазначеної помилки (EPERM).
Роб Нейпір,

Я не знаю, хоча якби мені довелося здогадуватися, я б здогадався про Solaris з надійними розширеннями (проблема прихованого каналу.) Крім того, зверніть увагу, що після вбивства є кілька порожніх рядків. Цікаво, чому?
Чарлі Мартін

15

У деяких випадках вам може знадобитися перебити весь процес, що працює в певному порту. Наприклад, якщо я запускаю програму вузла на порту 3000, і я хочу її вбити та запустити нову; тоді я знайшов цю команду корисною.

Знайдіть ідентифікатори процесу, що працюють на порту TCP 3000, і вбийте його

kill -9 `lsof -i TCP:3000 | awk '/LISTEN/{print $2}'`

саме те, що потрібно
Гумоюн Ахмад

6

Якщо ви знаєте назву процесу, ви можете використовувати:

killall Dock

Якщо ні, ви можете відкрити Activity Monitor і знайти його.


Я думаю, що це може бути поганою ідеєю насправді запустити цю команду. Я гадаю, ви могли б досить просто перезапустити док-станцію, але я не знаю, чи не було б проблем з таким підходом.
Кріс Лутц,

Це був лише приклад процесу, я не хочу, щоб він вбив свою док-станцію. Я припускаю, що killallприймає інший рядок порівняно з kill.
Гаррет,

3

Якщо kill -9це не спрацьовує, то не буде killall(і навіть те, killall -9що було б більш "інтенсивним"). Мабуть, процес хрому застряг у системному виклику, що не переривається (тобто в ядрі, а не в країні користувача) - не думав, що у MacOSX залишилось що-небудь із них, але, мабуть, завжди є ще один :-(. Якщо це процес має контрольний термінал, ви, ймовірно, можете зробити його фоновим і вбити в фоновому режимі; інакше (або якщо інтенсивне вбивство не спрацює навіть після того, як процес буде заземлений), у мене немає ідей, і я думаю, що вам, можливо, доведеться перезавантажити :-(.


3

Враховуючи шлях до вашої програми, я припускаю, що ви зараз виконуєте це під Xcode і, можливо, перебуваєте в точці зупинки налагодження. Процеси не можуть бути вбиті в цьому стані через основну реалізацію точок зупинки.

Першим кроком буде перехід до процесу Xcode та припинення налагодження. Якщо з якихось дивних причин ви втратили доступ до Xcode (можливо, Xcode втратив доступ до свого підпроцесу gdb), тоді рішення полягає в тому, щоб убити процес gdb. Більш загально, рішення тут полягає у вбивстві батьківського процесу. У вашому випадку це PID 811 (третя колонка).

У цьому випадку немає необхідності використовувати -9.


3

Я щойно шукав це, оскільки потрапив у подібну ситуацію, і замість того, kill -9 698щоб спробувати, sudo kill 428де 428 був підом процесу, який я намагаюся вбити. Для мене це працювало чисто, за відсутності дефіса "-". Сподіваюся, це допоможе!


Так, спробуйте sudo kill -9 PID - це спрацювало для мене (ід, чому ми не можемо вбити його від користувача і вимагати підвищення)
Роб

2

Я переконався, що якщо kill -9 PIDце не спрацьовує, і ви є власником процесу, ви можете скористатися цим, kill -s kill PIDщо дивно, оскільки на сторінці користувача вказано, що можете kill -signal_number PID.


kill -s kill 9мені допомогло
boraas

0

Нещодавно я зіткнувся з подібною проблемою, коли редактор atom не закривається. Жоден не відповідав. Вбити / вбити -9 / примусово вийти з монітора активності - не спрацювало. Нарешті довелося перезапустити Mac, щоб закрити програму.


0

в центрі уваги, шукайте Activity Monitor. Ви можете змусити повністю видалити будь-яку програму звідси.

введіть тут опис зображення

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