Яка різниця між pkill і killall?


49

Я знаю, що pkillмає більше правил фільтрації, ніж killall. Моє запитання, в чому різниця між:

pkill [signal] name

і

killall [signal] name

Я читав, що killallє більш ефективним і знищує всі процеси та підпроцеси (і рекурсивно), які відповідають nameпрограмі. pkillце теж не робить?


Відповіді:


46

pgrepІ pkillкомунальні послуги були введені в компанії Sun Solaris 7 і, як зазначив g33klord , вони беруть зразок в якості аргументу , який зіставляється з іменами запущених процесів. Поки pgrepпросто друкує список відповідних процесів, pkillвін надсилатиме вказаний сигнал (або SIGTERMза замовчуванням) процесам. Загальні параметри та семантика між pgrepта pkillкорисними, коли ви хочете бути обережними та спочатку перегляньте процеси відповідності списку pgrep, а потім приступайте до їх знищення pkill. pgrepі pkillнадаються в PROCPS пакет, який також надає іншу /procфайлову систему утиліта, такі як ps, top, free, uptimeсеред інших.

killallКоманда забезпечується Psmisc пакет, і відрізняється від pkillв тому , що, за замовчуванням, збігається з ім'ям аргументу точно (до перших 15 символів) при визначенні процесів сигнали будуть відправлені. -e, --exactПараметр може бути встановлений також вимагають точних збігів імен довжиною до 15 символів. Це робить killallдещо безпечнішим у використанні порівняно з pkill. Якщо вказаний аргумент містить /знаки слэш ( ), аргумент інтерпретується як ім'я файлу, і обробляється процес, що працює в певному файлі, буде обраний як отримувач сигналу. killallтакож підтримує регулярні вирази імен процесів, через -r, --regexpваріант.

Є й інші відмінності. killallКоманди, наприклад , має опції для узгодження процесів за віком ( -o, --older-thanі -y, --younger-than), в той час як pkillможна сказати тільки вбивати процеси на конкретному терміналі (через -tопції). Зрозуміло, що обидві команди мають конкретні ніші.

Зауважте, що killallкоманда на системах, що походять від Unix System V (зокрема , Solaris Sun , IBM AIX та HP-UX HP ), вбиває всі процеси, які можна піддавати вказівці певним користувачем.

Утиліти psmisc Linux були перенесені в BSD (і в розширенні Mac OS X ), отже killall, слідує семантика "процеси вбивства по імені"


Основна відмінність, з якою я стикався, - це зупинка команд шаблону користувачем killall -u <username> -r <process>або pkill <process> -U <uid>що killallзначно полегшує мені використання.
jeremysprofile

13

pkillце те, на що варто навчати майбутні покоління, як через фільтри, про які ви згадуєте, так і через те, що він поєднаний з багаторазовим використання pgrep. Вони вбивають процеси таким же чином, і не вбивають рекурсивно - хоча з допомогою pgrep, ви можете вибрати за сеансом (по-третє, думаю, setid) або групою процесів (думаю, контроль роботи).


8

одна відмінність полягає в тому, що killallв якості аргументу беруть точну назву процесу, тоді як ім'я pkillможе бути частковим або повним.

Ви можете передати це питання, щоб глибоко знати про pkill


1

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

pkill- надсилатиме вказаний сигнал (за замовчуванням SIGTERM) до кожного процесу замість того, щоб перелічити їх у stdout. pkillможе сигналізувати про декілька процесів на кшталт killall, але також може використовувати розширені критерії відбору, які можуть включати будь-яку комбінацію:

Командний батьківський термінал UID

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