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

19 0 Новини високих технологій

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

Процеси в Linux

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


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

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


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

    Команда top виводить на екран повний список поточних процесів. Крім того, у списку міститься безліч корисних відомостей про кожному запущеному процесі, наприклад:
  • PID - унікальний номер процесу;
  • USER - логін користувача, який запустив даний процес;
  • PR - пріоритет процесу в даний момент часу;
  • NI - пріоритет присвоєні процесу командою NICE;
  • S - стан даного процесу;
  • %CPU - скільки процесорного часу займає цей процес (у відсотках);
  • %MEM - обсяг оперативної пам'яті, яку займає даний процес (у відсотках);
  • TIME+ - скільки часу пройшло з моменту запуску процесу;
  • COMMAND - програма, яка запустила процес.
  • Linux: як вбити процес з допомогою термінальних команд
    Інформація, що надається командою 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 - показують процеси, не прив'язані до терміналу. Дана опція важлива при пошуку інформації про графічному додатку.
  • Linux: як вбити процес з допомогою термінальних команд
    За допомогою зв'язки команд ps і grep можна отримати всю інформацію, необхідну для знищення завислого додатка.

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

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

    Завершення процесу з допомогою команди kill

    Після того як ви дізналися PID процесу і його ім'я, можна приступити до операції завершення непотрібного програми. Для цього використовуються дві команди: kill - вбити процес id Linux та killall - завершити виконання програми по імені.
    Структура команди kill: kill SIGNAL PID. Де SIGNAL - це сигнал, який має бути відправлений, а PID - ідентифікатор процесу.
    Linux: як вбити процес з допомогою термінальних команд
    Параметр SIGNAL завершення процесу дорівнює 9 (SIGKILL). Таким чином, щоб в Linux вбити процес з pid потрібно ввести в консолі команду: kill -99578. Де 9578 унікальний номер процесу. Команда завершення процесу не єдина, яка може бути відправлена за допомогою системного застосування kill. Отримати список всіх команд, які можуть бути відправлені команді з допомогою kill, можна ввівши команду kill -l.
    Linux: як вбити процес з допомогою термінальних команд
    Корисно також знати інші значення, які може приймати параметр SIGNAL. Наприклад, для перезавантаження завислої програми можна використовувати параметр HUP. Сигнал SIGTERM не перериває роботу програми миттєво, а дає час для коректного завершення роботи, тобто програма зберігає дані, завершує своє виконання, та звільняє всі зайняті ресурси.

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

    Якщо відомо ім'я програми, яку потрібно виконати, можна скористатися командою killall. Наприклад, щоб знищити всі процеси, що відносяться до додатка Opera потрібно ввести команду: killall -9 Opera.
    Linux: як вбити процес з допомогою термінальних команд
    Правда, ця команда не завжди завершує процеси, що відносяться до уничтожаемой програмі. Якщо після виконання вищезгаданої команди ви введете комбінацію ps aux | grep Opera і побачите, що деякі процеси ще виконуються, найкраще завершити їх за допомогою системного застосування kill. У деяких випадках, щоб в Linux вбити процес, запущений іншим користувачем, можуть знадобитися права адміністратора. Тоді перед командою завершення процесу потрібно ввести команду sudo. Ось і всі відомості, необхідні користувачу для управління процесами. Правда, дана тема не є простою для новачків, але освоїти її потрібно, так як всі дії операційної системи здійснюються з допомогою процесів. Щоб навчитися управляти ними, потрібно трохи потренуватися.