Linux: як вбити процес за допомогою термінальних команд. Як вбити процес Linux Linux вбити процес по pid

Завдання і процеси

Будь-яка виконується в Linux програманазивається процесом. Linux як багатозадачна система характеризується тим, що одночасно може виконуватися безліч процесів, що належать одному або декільком користувачам. Вивести список виконуються в поточний часпроцесів можна командою ps, Наприклад, наступним чином:

/ Home / larry # ps PID TT STAT TIME COMMAND 24 3 S 0:03 (bash) 161 3 R 0:00 ps / home / larry #

Зверніть увагу, що за замовчуванням команда psвиводить список тільки тих процесів, які належать запустившему її користувачеві. Щоб подивитися всі виконуються в системі процеси, потрібно подати команду ps -a . номери процесів(Process ID, або PID), зазначені в першій колонці, є унікальними номерами, які система привласнює кожному працюючому процесу. Остання колонка, озаглавлена ​​COMMAND, вказує ім'я працюючої команди. В даному випадку в списку вказані процеси, які запустив сам користувач larry. В системі працює ще багато інших процесів, їх повний списокможна переглянути командою ps -aux. Однак серед команд, запущених користувачем larry, є тільки bash (командна оболонка для користувача larry) і сама команда ps. Видно, що оболонка bash працює одночасно з командою ps. Коли користувач ввів команду ps, Оболонка bash початку її виконувати. Після того, як команда psзакінчила свою роботу (таблиця процесів виведена на екран), управління повертається процесу bash. Тоді оболонка bash виводить на екран запрошення і чекає нової команди.

Працюючий процес також називають завданням(Job). Поняття процес і завдання є взаємозамінними. Однак, зазвичай процес називають завданням, коли мають на увазі управління завданням(Job control). Управління завданням - це функція командної оболонки, яка надає користувачеві можливість перемикатися між кількома завданнями.

У більшості випадків користувачі запускають тільки одне завдання - це буде та команда, яку вони ввели останньої в командній оболонці. Однак багато командні оболонки (включаючи bash і tcsh) мають функції управління завданнями(Job control), що дозволяють запускати одночасно кілька команд або завдань(Jobs) і, при необхідності, перемикатися між ними.

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

Передній план і фоновий режим

Завдання можуть бути або на передньому плані(Foreground), або фоновими(Background). На передньому плані в будь-який момент часу може бути тільки одне завдання. Завдання на передньому плані - це те завдання, з яким ви взаємодієте; воно отримує введення з клавіатури і посилає висновок на екран (якщо, зрозуміло, ви не перенаправили введення або виведення куди-небудь ще). Навпаки, фонові завдання не отримують введення з терміналу; як правило, такі завдання не потребують у взаємодії з користувачем.

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

Для управління виконанням процесів в Linux передбачено механізм передачі сигналів. Сигнал - це здатність процесів обмінюватися стандартними короткими повідомленнями безпосередньо за допомогою системи. Повідомлення-сигнал не містить ніякої інформації, крім номера сигналу (для зручності замість номера можна використовувати зумовлене системою ім'я). Для того, щоб передати сигнал, процесу досить задіяти системний виклик kill (), А для того, щоб прийняти сигнал, не потрібно нічого. Якщо процесу потрібно якось по-особливому реагувати на сигнал, він може зареєструвати обробник, А якщо обробника немає, за нього відреагує система. Як правило, це призводить до негайного завершення процесу, який отримав сигнал. Оброблювач сигналу запускається асинхронно, Негайно після отримання сигналу, що б процес в цей час не робив.

Два сигналу - номер 9 ( KILL) І 19 ( STOP) - завжди обробляє система. Перший з них потрібен для того, щоб вбити процес напевно (звідси і назва). сигнал STOP призупиняє процес: в такому стані процес не видаляється з таблиці процесів, але і не виконується до тих пір, поки не отримає сигнал 18 ( CONT) - після чого продовжить роботу. У командній оболонці Linux сигнал STOPможна передати активного процесу за допомогою керуючої послідовності Ctrl -Z .

Сигнал номер 15 ( TERM) Служить для переривання роботи завдання. при перериванні(Interrupt) завдання процес гине. Переривання завдань зазвичай здійснюється керуючою послідовністю Ctrl -C. Відновити перерване завдання ніяким чином неможливо. Слід також знати, що деякі програми перехоплюють сигнал TERM(За допомогою обробника), так що натискання комбінації клавіш Ctrl -C(О) може не перервати процес негайно. Це зроблено для того, щоб програма могла знищити сліди своєї роботи перш, ніж вона буде завершена. На практиці, деякі програми взагалі не можна перервати таким способом.

Переклад в фоновий режим і знищення завдань

Почнемо з простого прикладу. Розглянемо команду yes, яка на перший погляд може здатися марною. Ця команда посилає нескінченний потік рядків, що складаються з символу y на стандартний висновок. Подивимося, як працює ця команда:

/ Home / larry # yes y y y y y

Послідовність таких рядків буде нескінченно тривати. Знищити цей процес можна, відправивши йому сигнал переривання, т. Е. Натиснувши Ctrl -C. Зробимо тепер інакше. Щоб на екран не виводилася ця нескінченна послідовність переспрямуємо стандартний висновок команди yes на / dev / null. Як ви, можливо, знаєте, пристрій / dev / null діє як «чорна діра»: всі дані, надіслані в цей пристрій, пропадають. За допомогою цього пристрою дуже зручно позбавлятися від занадто рясного виведення деяких програм.

/ Home / larry # yes> / dev / null

Тепер на екран нічого не виводиться. Однак і запрошення командної оболонки теж не повертається. Це відбувається тому, що команда yes все ще працює і посилає свої повідомлення, що складаються з літер y на / dev / null. Знищити це завдання також можна, відправивши йому сигнал переривання.

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

Один спосіб перевести процес у фоновий режим - приписати символ & до кінця команди. приклад:

/ Home / larry # yes> / dev / null & + 164 / home / larry #

Повідомлення являє собою номер завдання(Job number) для процесу yes. Командна оболонка присвоює номер завдання кожному виконуваного завданням. Оскільки yes є єдиним виконуваним завданням, йому присвоюється номер 1. Число 164 є ідентифікаційним номером, відповідним даному процесу (PID), і цей номер також дан процесу системою. Як ми побачимо далі, до процесу можна звертатися, вказуючи обидва цих номера.

Отже, тепер у нас є процес команди yes, що працює у фоновому режимі, і безперервно посилає потік з букв y на пристрій / dev / null. Для того, щоб дізнатися статус цього процесу, потрібно виконати команду jobs, Яка є внутрішньою командою оболонки.

/ Home / larry # jobs + Running yes> / dev / null & / home / larry #

Ми бачимо, що ця програма дійсно працює. Для того, щоб дізнатися статус завдання, можна також скористатися командою ps, Як це було показано вище.

Для того, щоб передати процесу сигнал (найчастіше виникає потреба перерватироботу завдання) використовується утиліта kill. Як аргумент цій команді дається або номер завдання, або PID. Необов'язковий параметр - номер сигналу, який потрібно відправити процесу. За замовчуванням відправляється сигнал TERM. У розглянутому вище випадку номер завдання був 1, так що команда kill% 1перерве роботу завдання. Коли до завдання звертаються по його номеру (а не PID), тоді перед цим номером в командному рядкупотрібно поставити символ відсотка ( «%»).

Тепер введемо команду jobsзнову, щоб перевірити результат попередньої дії:

/ Home / larry # jobs Terminated yes> / dev / null

Фактично завдання знищено, і при введенні команди jobs наступного разу на екрані про нього не буде ніякої інформації.

Знищити завдання можна також, використовуючи ідентифікаційний номер процесу (PID). Цей номер, поряд з ідентифікаційним номером завдання, вказується під час старту завдання. У нашому прикладі значення PID було 164, так що команда kill 164була б еквівалентна команді kill% 1. При використанні PID як аргумент команди kill вводити символ «%» не потрібно.

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

Запустимо спочатку процес командою yes на передньому плані, як це робилося раніше:

/ Home / larry # yes> / dev / null

Як і раніше, оскільки процес працює на передньому плані, запрошення командної оболонки на екран не повертається.

Тепер замість того, щоб перервати завдання комбінацією клавіш Ctrl -C, Завдання можна призупинити(Suspend, буквально - підвісити), відправивши йому сигнал STOP. Для припинення завдання треба натиснути відповідну комбінацію клавіш, зазвичай це Ctrl -Z .

/ Home / larry # yes> / dev / null Ctrl -Z+ Stopped yes> / dev / null / home / larry #

Призупинений процес просто не виконується. На нього не витрачаються обчислювальні ресурси процесора. Припинене завдання можна запустити виконуватися з тієї ж точки, як ніби-то воно і не було призупинено.

Для відновлення виконання завдання на передньому плані можна використовувати команду fg(Від слова foreground - передній план).

/ Home / larry # fg yes> / dev / null

Командна оболонка ще раз виведе на екран назву команди, так що користувач буде знати, яке саме завдання він в даний моментзапустив на передньому плані. Призупинимо це завдання ще раз натисканням клавіш Ctrl -Z, Але в цей раз запустимо його в фоновий режим командою bg(Від слова background - фон). Це призведе до того, що даний процес буде працювати так, як якщо б при його запуску використовувалася команда з символом & в кінці (як це робилося в попередньому розділі):

/ Home / larry # bg + yes $> $ / dev / null & / home / larry #

При цьому запрошення командної оболонки повертається. зараз команда jobsповинна показувати, що процес yesдійсно в даний момент працює; цей процес можна знищити командою kill, Як це робилося раніше.

Для того, щоб призупинити завдання, яке працює у фоновому режимі, не можна скористатися комбінацією клавіш Ctrl -Z. Перш, ніж припиняти завдання, його потрібно перевести на передній план командою fgі лише потім призупинити. Таким чином, команду fgможна застосовувати або до призупиненим завданням, або до завдання, що працює у фоновому режимі.

Між завданнями в фоновому режимі і припиненими завданнями є велика різниця. Припинене завдання не працює - на нього не витрачаються обчислювальні потужності процесора. Це завдання не виконує ніяких дій. Припинене завдання займає деякий об'єм оперативної пам'яті комп'ютера, через деякий час ядро ​​відкачає цю частину пам'яті на жорсткий диск « до вимоги». Навпаки, завдання у фоновому режимі виконується, використовує пам'ять і робить деякі дії, які, можливо, вам потрібні, але ви в цей час можете працювати з іншими програмами.

Завдання, що працюють у фоновому режимі, можуть намагатися виводити деякий текст на екран. Це буде заважати працювати над іншими завданнями.

/ Home / larry # yes &

Тут стандартний висновок не був перенаправлений на пристрій / dev / null, тому на екран буде виводиться нескінченний потік символів y. Цей потік неможливо буде зупинити, оскільки комбінація клавіш Ctrl -Cне вплине на завдання у фоновому режимі. Для того щоб зупинити цю видачу, треба використовувати команду fg, Яка переведе завдання на передній план, а потім знищити завдання комбінацією клавіш Ctrl -C .

Зробимо ще одне зауваження. зазвичай командою fgі командою bgвпливають на ті завдання, які були припинені останніми (ці завдання будуть позначені символом + поруч з номером завдання, якщо ввести команду jobs). Якщо в один і той же час працює одне або кілька завдань, завдання можна поміщати на передній план або в фоновий режим, задаючи в якості аргументів команди fgабо команди bgїх ідентифікаційний номер (job ID). Наприклад, команда fg% 2поміщає завдання номер 2 на передній план, а команда bg% 3поміщає завдання номер 3 в фоновий режим. Використовувати PID в якості аргументів команд fgі bgне можна.

Більш того, для перекладу завдання на передній план можна просто вказати його номер. Так, команда %2 буде еквівалентна команді fg% 2 .

Важливо пам'ятати, що функція управління завданням належить оболонці. команди fg , bgі jobsє внутрішніми командами оболонки. Якщо, з деякої причини, ви використовуєте командну оболонку, яка не підтримує функції управління завданнями, то ви в ній цих (і подібних) команд не знайдете.

Уявіть собі: ви запустили програму, працюєте з нею, а через час вона перестає відповідати на запити і висне. Запустити повторно додаток неможливо через те, що її екземпляр ще висить в пам'яті комп'ютера. Що робити в такому випадку? В першу чергу потрібно завершити роботу програми і видалити процес з пам'яті.

Найбільш простий і універсальний спосібвбити процес в Linux - це використання термінальних команд. Даний варіант буде працювати на будь-якому дистрибутиві Linux.

Процеси в Linux

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

Всі процеси, що працюють в Linux, мають такі атрибути:

  1. PID - унікальний для кожного процесу ідентифікатор.
  2. PPID - ідентифікатор батьківського процесу.
  3. Ідентифікатор користувача, що запустив процес.
  4. Пріоритет.
  5. Стан процесу.

Кожен запущений процес знаходиться в одному з станів:

  • "Виконується". Для позначення цього стану використовується буква R.
  • Процес, який запустив системну операцію, наприклад введення або виведення даних, і чекає коли завершиться її виконання, називається "Очікування". Позначається буквою S.
  • Процес, який зупинений користувачем або ОС Linux, знаходиться в стані "Зупинено". Цей стан позначається символом Т.
  • "Зомбі" - процеси, які більше не виконуються, але споживають ресурси операційної системи. Позначаються літерою Z.
  • Безперервний процес не можна завершити, поки не закінчиться операція прямого доступу в пам'ять. Позначається процес символом D.

Пошук процесу

Перед тим як в Linux вбити процес, його потрібно спочатку знайти. Найчастіше для цієї мети в Linux використовують дві команди top і ps.

Команда top виводить на екран повний список поточних процесів. Крім того, в списку міститься безліч корисних відомостей про кожний запущений процес, наприклад:

  • PID - унікальний номерпроцесу;
  • USER - логін користувача, який запустив цей процес;
  • PR - пріоритет процесу в даний момент часу;
  • NI - пріоритет присвоєні процесу командою NICE;
  • S- стан даного процесу;
  • % CPU- скільки процесорного часу займає цей процес (у відсотках);
  • % MEM- обсяг оперативної пам'яті, Яку займає даний процес (у відсотках);
  • TIME + - скільки часу пройшло з моменту запуску процесу;
  • COMMAND - програма, яка запустила процес.

Інформація, яку надає командою top, виводиться відсортованої за рівнем використовуваного процесорного часу (стовпець% CPU). Користувач може змінити порядок сортування:

  • впорядкувати процеси за обсягом займаної оперативної пам'яті (стовпець% MEM) потрібно натиснути комбінацію клавіш Shift + M;
  • впорядкувати за номером процесу (стовпець PID) можна за допомогою комбінації Shift + N;
  • впорядкувати за часом роботи (стовпець TIME +) - Shift + T.
  • повернутися до вихідної сортування за рівнем завантаження центрального процесора - натиснути комбінацію Shift + P.

Використання команди ps

За допомогою команди top можна отримати безліч необхідних відомостей, проте це не найзручніший спосіб отримання необхідної інформації про потрібний вам процесі. Щоб не шукати потрібний процес, Можна скористатися командою ps і фільтрувати список за допомогою команди greep. Наприклад, якщо потрібно знайти всі процеси, пов'язані з запущеним браузером Opera, Можна ввести команду ps axu | grep Mozilla.

Команда ps володіє наступними параметрами:

  • a - показати процеси для всіх користувачів;
  • u - відобразити користувача, який є власником процесу;
  • x - показують процеси, не прив'язані до терміналу. Дана опція важлива при пошуку інформації про графічний додатку.

За допомогою зв'язки команд ps і grep можна отримати всю інформацію, необхідну для знищення завислого додатка.

Інші способи пошуку процесу

Для того щоб знайти PID процесу по його імені, існує команда pidof. Формат її використання наступний: pidof + ім'я програми. Наприклад, щоб знайти всі PID, що відносяться до програми Opera, потрібно ввести: pidof Opera.

У деяких випадках буває так, що програма завершила своє виконання, але не звільнила мережевий порт. Щоб отримати відомості, в даному випадку потрібно ввести команду fuser: fuser -vn tcp 80. Де 80 - це номер завислого порту. Після цього можна вбити процес Linux по порту.

Після того як ви дізналися PID процесу і його ім'я, можна приступити до операції завершення непотрібного додатка. Для цього використовуються дві команди: kill - вбити процес по id в Linux і killall - завершити виконання програми по імені.

Структура команди kill: kill SIGNAL PID. Де SIGNAL - це сигнал, який повинен бути відправлений, а PID - це ідентифікатор процесу.

Параметр SIGNAL завершення процесу дорівнює 9 (SIGKILL). Таким чином, щоб в Linux вбити процес по pid потрібно ввести в консолі команду: kill -9 9578. Де 9578 унікальний номер процесу.

Команда завершення процесу не єдина, яка може бути відправлена ​​за допомогою системного застосування kill. Отримати список всіх команд, які можуть бути відправлені команді за допомогою kill, можна ввівши команду kill -l.

Корисно також знати інші значення, які може приймати параметр SIGNAL. Наприклад, для перезавантаження зависла програми можна використовувати параметр HUP. Сигнал SIGTERM не перериває роботу програми миттєво, а дає час для коректного завершення роботи, тобто додаток зберігає дані, завершує своє виконання, і звільняє всі зайняті ресурси.

Як в Linux вбити процес по імені

Якщо відоме ім'я програми, яку потрібно завершити, можна скористатися командою killall. Наприклад, щоб знищити всі процеси, пов'язані з додатком Opera потрібно ввести команду: killall -9 Opera.

правда, дана командане завжди завершує процеси, пов'язані з знищуваної програмі. Якщо після виконання вищевказаної команди ви введете комбінацію ps aux | grep Opera і побачите, що деякі процеси ще виконуються, найкраще завершити їх за допомогою системного застосування kill.

У деяких випадках, щоб в Linux вбити процес, запущений іншим користувачем, можуть знадобитися права root. Тоді перед командою завершення процесу потрібно ввести команду sudo.

Ось і всі відомості, необхідні користувачу для управління процесами. Правда, дана тема не є простою для новачків, але освоїти її потрібно, так як всі дії операційної системи здійснюються за допомогою процесів. Щоб навчитися керувати ними, потрібно трохи потренуватися.

Аргумент -9 (або KILL) для команди kill слід використовувати в POSIX-сумісних системах тільки в разі крайньої необхідності. Чому? Сигнал KILL не може бути оброблений процесом. Це означає, що після завершення процесу за допомогою kill -9, дочірні процеси залишаться в пам'яті і стануть «осиротілими» (orphaned), файлова системавиявиться засмічена тимчасовими файлами, сегменти спільно використовуваної пам'яті - активними, сокети - завислими, а функція atexit (3) взагалі не буде виконана. В результаті є ризик зіткнутися з несподіваними і складними для налагодження проблемами.

Замість цього використовуйте дефолтний сигнал TERM, а KILL - тільки якщо менш проблемні сигнали виявляться неефективними:

$ Kill 6738
$ Kill -INT 6738
$ Kill -HUP 6738
$ Kill -KILL 6738

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

Використання kill -KILL за замовчуванням допустимо при роботі з проблематичним додатком, наприклад, старі версії Netscape частенько завершувалися тільки за допомогою сигналу KILL. Однак, це рідкісний виняток із правила: використовуйте KILL для цих заздалегідь відомих додатків і тільки для них.

Проблеми, що виникають при завершенні процесів

Послідовна відправка різних сигналів може викликати наступні проблеми: по-перше, процесу можуть знадобитися секунди, або навіть десятки секунд для коректного завершення. Один продукт, яким мені доводилося користуватися, вимагав більше 30 секунд для правильного завершення після отримання сигналу TERM. На щастя, ця особливість була виявлена ​​під час тестування, тому для цього випадку був написаний відповідний скрипт. По-друге, іноді бувають ситуації, коли старий процес завершився, в той час як новий процес зайняв його ID в проміжку між сигналами TERM і KILL. Особливо цьому ризику піддаються системи з підвищеною «плинністю» процесів і системи, де ядро ​​призначає PID у випадковому порядку, наприклад, OpenBSD. Перевірка імені процесу або його PPID не завжди допомагає, так як новий процес може бути Форком того ж батька і мати таке ж ім'я, тому особливо параноїдальні скрипти можуть також перевіряти час створення процесу або інші метадані перед відправкою сигналу. Можливо ці ситуації виникають рідко, але з ними варто рахуватися, якщо доводиться мати справу з критичним процесом.

Сигнали завершення процесу

Сигнали завершення процесу можуть позначатися на ім'я або порядковим номером: kill -1 і kill -HUP еквівалентні. Однак, використання імені сигналу безпечніше, так як при вказівці аргументу -1 легко опечатані, відправивши сигнал іншому процесу або навіть групі процесів. Також завжди намагайтеся використовувати ім'я в скриптах, так як це допоможе краще зрозуміти який тип сигналу відправляється того, хто буде читати ваш код.

Сигнал HUP «підвішує» шелл, тому це гарний спосібочистити шелл, що повис в очікуванні введення, або закрити SSH-сесію.

більш Детальна інформаціяпро сигнали завершення процесів вказана в

Сигнали - програмні переривання. Вони використовуються для зв'язку між процесами в UNIX і UNIX-подібних операційних систем, таких як Linux, Mac OS.

Сигнали використовувалися ще з Bell Labs UNIX в 1970 і сьогодні офіційно визначено стандартом POSIX. Коли сигнал надходить на процес, операційна система перериває нормальний потік виконання процесу і забезпечує повідомлення.

Не має значення, яку операційну системуви використовуєте, ви безсумнівно зіткнетеся з тим що ваші програми, блокуються і відмовитися працювати належним чином. В Unix, Linux, є команда «kill», яку ви можете використовувати, щоб припинити процес негайно, але і не тільки це, але про це трохи пізніше я розповім. У цій статті «Команда kill в Unix / Linux» я розповім і покажу на готових прикладах різні команди утиліти kill.

Команди kill і сигнали

Коли ви виконуєте команду «kill», ви насправді посилає е сигнал до системи і даєте вказівку розірвати роботу некоректної роботи програми. Існує в загальній складності 60 сигналів, які можна використовувати, але все, що ви дійсно повинні знати, SIGTERM (15) і SIGKILL (9).

Ви можете переглянути всі сигнали за допомогою команди:

# Kill -l

На моїй MacOS:

Я спробую розповісти про всіх сигналах, але для самого початку поговоримо тільки про найважливіші і часто використовуються.

Основні сигнали

Наступні сигнали є частиною стандарту POSIX. Кожен сигнал макрос, визначений в Файл заголовка. Вони, як правило, скорочено, без їх SIG- префікса; наприклад SIGHUP часто називають просто як HUP.

SIGTERM- Цей сигнал запитує зупинку процесу який працює. Цей сигнал може бути проігнорірован.Процессу дається час, щоб добре вимкнувся. Коли програма добре вимикається, це означає, що їй дано час, щоб врятувати його прогрес і звільнити ресурси. Іншими словами, він не «forced» припинення роботи процесу.

SIGKILL- сигнал SIGKILL змушує процес припинити виконання своєї роботи негайно. Програма не може ігнорувати цей сигнал. Незбережений прогрес буде втрачено.

Синтаксис для «kill».

Синтаксис команди такий:

# Kill PID (s)

# Kill [-s] [-l]% pid

Сигнал за замовчуванням (якщо він не вказаний) є SIGTERM. Коли даний сигнал не допомагає і не працює, ви можете використовувати такі опції для «kill» щоб завершити процес примусово:

# Kill SIGKILL PID

# Kill -9 PID

де «-9» - це прапор відноситься до сигналу SIGKILL.

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

$ Ps -aux

А якщо знаєте конкретне додаток(Наприклад apache), то можна відсіяти непотрібне і вивести всі процеси по даній службі:

$ Ps -aux | grep apache

І це відобразить всі запущені програмиразом з його PID-му (ами).

Наприклад, щоб убити додаток, я виконайте наступну команду:

# Kill -9 3629

Варто також відзначити, що ви можете використовувати кілька процесів одночасно щоб їх можна було »вбити»:

# Kill -9 PID1 PID2 PID 3

Перезагурзіть конфігураційні файли або перезапуск утиліт:

# Kill -1 number_of_PID

Особливо корисними сигнали включають HUP, INT, kill, STOP, CONT, і 0.

Варіанти такі:

-s signal_name
Символічне ім'я сигналу, що задає сигнал для відправки сигналу не за замовчуванням.

-l
Якщо операнд не вказано, то показати імена сигналів; В іншому випадку, написати назву сигналу, відповідного exit_status.

-signal_name
Символічне ім'я сигналу, що задає сигнал для відправки в TERM за замовчуванням.

-signal_number
Невід'ємне десяткове ціле, що задає сигнал для відправки в TERM за замовчуванням.

Наступні PID-и, мають особливе значення:
-1 Якщо привілейований користувач, то транслює сигнал всім процесам; в іншому випадку віщає на все процессиbelong-
ing для користувача.

Деякі з найбільш часто використовуваних сигналів:

  • 1 HUP (hang up) - повісити.
  • 2 INT (interrupt) - переривання.
  • 3 QUIT (quit) - вихід.
  • 6 ABRT (abort) - переривання.
  • 9 KILL (non-catchable, non-ignorable kill)
  • 14 ALRM ( alarm clock) - будильник.
  • 15 TERM (software termination signal) - Програмне забезпеченняперестануть дзвонити.

PKill

Команда «pkill» дозволяє використовувати розширені шаблони регулярних виразів і інших критеріїв відповідності. Замість того щоб використовувати PID, тепер ви можете вбити додаток, ввівши ім'я процесу. Наприклад, щоб убітьбраузер Firefox, просто запустіть команду:

# Pkill Firefox

Так як він відповідає шаблоном регулярного виразу, Ви також можете ввести частину імені процесу, наприклад:

# Pkill fire

Щоб уникнути «вбивства» неправильних процесів, ви можете зробити «pgrep -l [імя_процесса]» в список відповідних процесів.

Pkill команда має набагато більше варіантів, наприклад якщо вказати опцію «-u», то вона дозволить вам вказати ім'я користувача або ID. У цьому прикладі ми посилаємо сигнал TERM всім процесам, що належать користувачеві 'nobody':

# Pkill -u nobody

Killall

Killall використовує ім'я процесу, а замість PID, і він «вбиває» всі екземпляри процесу з тим же ім'ям. Наприклад, якщо ви використовуєте кілька примірників браузера Firefox, Ви можете вбити їх усіх за допомогою команди:

# Killall firefox

У Gnome, ви можете перезапустити Nautilus за допомогою команди:

# Killall nautilus

xkill

Xkill є графічним способом «вбити» додаток. При введенні «XKill» в терміналі, курсор миші буде негайно стати «хрест». Все, що вам потрібно зробити, це натиснути «хрест» на тих, що провинилися додаток і він уб'є додаток миттєво. Якщо ви зацікавлені, ви можете додати поєднання клавіш для включення функції XKill.

Ще сигнали які використовуються

SIGABRT

Цей сигнал посилає сигнал процесу, щоб перервати операцію. ABRT як правило, спрямований на сам процес, коли він викликає функцію abort () мови програмування С, щоб сигналізувати аварійне завершення, але він може бути направлений з будь-якого процесу, як і будь-який інший сигнал.

SIGALRM, SIGVTALRM і SIGPROF

ALRM, VTALRM і / або сигнал PROF відправляється процесу, коли ліміт часу, вказаний при виконанні функції сигналізації (наприклад, setitimer) закінчується.

ALRM

Надсилається, коли даний час або годинник з плином часу.

VTALRM

Надсилається, коли процесорний час, що використовується в процесі закінчиться.

PROF

Надсилається, коли процесорний час, що використовується процесом і системи від імені процесу закінчується.

SIGBUS

BUS сигнал посилає процесу, коли це призводить до помилки шини. Умови, які призводять до даного сигналу, наприклад, неправильне вирівнювання доступу до пам'яті або відсутність фізичної адреси.

SIGCHLD

Сигнал CHLD відправляє процесу, коли дочірній процес завершується, переривається або відновлюється після переривання. Один з поширеного використання сигналу - це дати сигнал ОС на очистку ресурсів, які використовуються в процесі дочірнього процесу після його закінчення без явного системного виклику.

SIGCONT

Сигнал CONT інструктує операційну систему, і дає сигнал перезапустити процес який раніше був припинений в режимі СТОП або сигналу TSTP. Однією з важливих особливостей цього сигналу є контроль роботи в оболонці Unix.

SIGFPE

Сигнал FPE посилає процесу, коли він виконує помилкове, арифметичні спрацьовування, наприклад, такі як поділ на нуль.

SIGHUP

Сигнал HUP посилає процесу, коли його керуючий термінал закритий. Спочатку він був розроблений, щоб повідомити процес після послідовного падіння лінії (HUP відповідальний за «зависання»). В сучасних системах, Цей сигнал зазвичай означає, що контроль псевдо або віртуальним терміналом був закритий.

SIGILL

ILL сигнал, що посилається процесу при спробі виконати шкідливі, невідомі або привілейовані команди (інструкції).

SIGINT

Сигнал INT посилає процесу від керуючого терміналу, коли користувач бажає перервати процес. Це як правило, ініціюється натисканням Control-C, але на деяких системах, «delete» або «break».

SIGKILL

Сигнал KILL посилає процесу щоб він негайно припинив роботу. На відміну від SIGTERM і SIGINT цей сигнал не може бути захоплений або проігнорований і приймаючий процес не може виконати будь-які очистку після отримання цього сигналу.

SIGPIPE

Сигнал PIPE надсилається процесу, коли він намагається записати в трубі без процесу, підключеного до іншого кінця.

SIGQUIT

QUIT сигнал посилається процесу від його керуючого терміналу, коли користувач запитує процес виконання дампа.

SIGSEGV

Сигнал SEGV відправляється в процес, коли він робить неприпустиму посилання віртуальної пам'яті або збій сегментації, тобто коли він виконує порушення сегментації.

SIGSTOP

STOP сигнал вказує ОС, щоб зупинити процес для подальшого відновлення.

SIGTERM

Сигнал TERM надсилається в процес, щоб запитати дозволу про його припинення. На відміну від сигналу «kill», він може бути і інтерпретується або ігнорованих в процесі. Це дозволяє процесу виконувати «nice» виконання для припинення вивільнення ресурсів і збереження стану в разі потреби. Слід зазначити, що SIGINT майже ідентичний SIGTERM.

SIGTSTP

Сигнал TSTP надсилається в процес його керуючого терміналу і каже йому, що потрібно тимчасово призупинити. Це зазвичай ініціюється користувачем натисканням Control-Z. На відміну від SIGSTOP, цей процес може зареєструвати обробник сигналу або щоб ігнорувати сигнал.

SIGTTIN і SIGTTOU

У TTIN і TTOU сигнали посилаються процесу, коли він намагається прочитати або записати відповідно з (tty) терміналу на задньому плані. Як правило, цей сигнал може бути отриманий тільки за допомогою процесів знаходяться під контролем робочій панелі; демони не мають керуючі термінали і ніколи не повинні отримувати цей сигнал.

SIGUSR1 і SIGUSR2

Сигнали USR1 і USR2 відправляються процесу і вказують певні користувачем умови.

SIGPOLL

Сигнал POLL відправляється в процесі, коли відбувається асинхронна подія введення / виведення.

SIGSYS

Сигнал SYS відправляється в процесі, коли він пропускає поганий аргумент для системного виклику.

SIGTRAP

TRAP сигнал посилає процесу коли виникає стан що відладчик просив бути поінформованим - Наприклад, коли конкретна функція виконується або коли змінюється певне значення змінної.

SIGURG

Сигнал URG відправляється процесу, коли socket має термінові або поза діапазону даних, доступних для читання.

SIGXCPU

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

SIGXFSZ

Сигнал XFSZ відправляється в процесі, коли файл виростає (перевищує задане значення), ніж максимально допустиме значення.

SIGRTMIN to SIGRTMAX

Сигнали RTMIN - RTMAX призначені для використання в призначених для користувача цілей. Вони сигнали реального часу.

різні сигнали

Наступні сигнали не стандартизовані POSIX, але іноді використовуються на деяких системах.

SIGEMT

Сигнал ЕМТ відправляється в процесі, коли відбувається переривання емулятора.

SIGINFO

Сигнал INFO відправляється в процесі, коли запит статусу отриманий від керуючого терміналу.

SIGPWR

Сигнал PWR відправляється в процесі, коли система зазнає збій харчування.

SIGLOST

LOST сигнал посилається до процесу, коли «file lock» втрачається.

SIGWINCH

Сигнал WINCH відправляється в процесі, коли його керуючий термінал змінює свій розмір.

Відправлення сигналів з клавіатури

Сигнали можуть бути відправлені з клавіатури. Кілька стандартних значень за замовчуванням перераховані нижче. За замовчуванням поєднання клавіш для відправки сигналів переривання може бути визначений за допомогою команди stty.

CTRL-C

Надіслати SIGINT (переривання). За замовчуванням це викликає процес припиняється.

CTRL-Z

Надіслати SIGTSTP (Suspend). За замовчуванням це викликає процес призупинити всі операції.

CTRL- \

Надіслати SIGQUIT (Quit). За замовчуванням це викликає процес припинити негайно і скинути ядро.

CTRL-T

Надіслати SIGINFO (INFO). За замовчуванням це змушує операційну систему відображати інформацію про команду. Чи не підтримується на всіх системах.

висновок

Коли додатки поводяться неправильно і викликали до зависання системи, це дуже заманливо, щоб перезавантажити комп'ютер і почати сеанс знову і знову. За допомогою цих команд «kill», ви зможете краще керувати поганою поведінкою додатків які викликають або можуть викликати крах системи. На цьому, я завершую дану тему«Команда kill в Unix / Linux».

Сподобалася стаття? Поділіться з друзями!