Яка різниця між kill, pkill та killall


31

Мені добре знайома killкоманда, і ми часто використовуємо kill -9, щоб насильно вбити процес, є багато інших сигналів, з якими можна використовувати kill. Але мені цікаво, якими є випадки використання pkillта killall, якщо вже є команда kill.

Чи використовувати pkillта killallвикористовувати killкоманду при їх виконанні? Я маю на увазі, що вони просто обгортки killабо вони мають власну реалізацію?

Я також хотів би знати, як pgrepкоманда отримати ідентифікатор процесу від імені процесу.

Чи всі ці команди використовують однакові базові виклики системи? Чи є різниця з точки зору продуктивності, яка з них швидша?


2
Дві речі: навіщо використовувати kill -9за замовчуванням? -15 (будь ласка, зупиніться) і -1 (модем завис, будь ласка, ЧИСТО закрийте себе) набагато ввічливіші. По-друге. Остерігайтеся використання killall на нелінукс-коробках. Це може поводитися інакше. (Наприклад, на solaris це вбиває всіх. НЕ ФІЛЬТРОВАНО на іменах процесів).
Геннес

Відповіді:


31

killКоманда є дуже простий оболонкою для kill системного виклику , який знає тільки про ідентифікатори процесів (PIDs). pkillа killallтакож є обгортками для kill системного виклику (власне, до бібліотеки libc, яка безпосередньо викликає системний виклик), але може визначати PID для вас, виходячи з таких речей, як ім'я процесу, власник процесу, ідентифікатор сесії тощо.

Як pkillі як killallможна побачити, використовуючи ltraceабо straceна них. В Linux вони обидва читають /procфайлову систему, і кожен знайдений pid (каталог) проходить шлях таким чином, щоб ідентифікувати процес за його іменем або іншими атрибутами. Те, як це робиться, технічно кажучи, специфічно для ядра та системи. Загалом вони читають, з /proc/<PID>/statяких міститься назва команди як 2-е поле. Для pkill -fта pgrepвивчіть /cmdlineзапис для кожного запису PID.

pkillі pgrepвикористовувати readprocсистемний виклик, тоді як killallні. Я не можу сказати, чи є різниця в продуктивності: вам доведеться це орієнтувати самостійно.


2

kill і killall - це інструменти, які дають спосіб вбити процес. Перший за PID, другий за назвою. pgrep (список) та pkill (вбити за замовчуванням) - це інструменти, які надають спосіб надсилати повідомлення до процесу за своїм ім’ям чи іншими атрибутами, див .: http://linux.die.net/man/1/pkill Докладніше про сигнали: http://linux.die.net/man/7/signal


Ви маєте на увазі killall, що використовується для вбивства процесу за його назвою? і він використовує для цієї мети pgrep? а killallтакож вбиває всі процеси дитини,? який сигнал killallвикористовується за замовчуванням?
Іджаз Ахмад Хан

3
... якщо ви не перебуваєте на Solaris, в цьому випадку ви killallбудете знищувати всі процеси, які ви маєте право вбити, так що якщо ви root, ви ефективно перезавантажите сервер.
Jenny D

1
так: killall chromiumвб'є процес хромування, pgrep chromiumдасть вам список PID, pkill chromiumвб’є хром. killall пошле сигнал SIGTERM по замовчуванням (як pkill)
dervishe
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.