Поиск по сайту:

Причины, по которым Kill может не работать в Linux, как решить эту проблему?


Все мы в тот или иной момент сталкивались с тем, что программа зависала и не отвечала. В таких случаях завершение работы программы и ее перезапуск — простое и эффективное решение. В этой статье мы покажем вам, как можно завершить не отвечающие процессы с помощью команды Kill.

Команда «Убить»

Как упоминалось ранее, когда программа перестает отвечать на запросы, и вы не можете ее перезапустить, вам нужно новое решение. В этот момент пользователи Windows открывали свой диспетчер задач, чтобы избавиться от зависшего процесса. В Linux нет встроенного диспетчера задач, но есть команда, которую мы можем использовать для достижения того же эффекта, что и функция «Завершить задачу» в Windows. Эта команда известна как команда «Убить», и мы можем использовать ее несколькими способами, чтобы помочь себе и системе избавиться от поврежденных экземпляров.

Убить синтаксис

Синтаксис команды Kill прост.

$ kill -- [signal] PID

Здесь необходимо объяснить две вещи, а именно сигнал и ПИД. Давайте рассмотрим их один за другим и узнаем, как они влияют на функциональность этой команды.

Параметр Сигнал

Во-первых, это сигнал. Сигналы — это простые цифры, представляющие имя. Команда Kill может выполнять разные задачи в зависимости от подаваемого вами сигнала. Пользователи могут использовать более 60 различных значений сигналов, каждый из которых выполняет отдельные конкретные задачи. Чтобы просмотреть все эти параметры, вы можете использовать следующую команду:

$ Kill -l

Когда вы используете эту команду в командном терминале Ubuntu, вы получаете это на своем экране:

Как видите, всего доступно 64 варианта.

Хотя существует более 60 различных сигналов, два наиболее распространенных из них описаны ниже.

  1. SIGKILL (9): как следует из названия, эта команда полностью уничтожает процесс без сохранения данных программы. Эту команду следует использовать только в крайнем случае.

  2. SIGTERM (15): генерирует сигнал завершения, который закрывает программу в первую очередь с точки зрения безопасности. Это также сигнал по умолчанию.

Сигналы могут быть дополнительно определены 3 различными способами, описанными ниже.

1. Мы можем указать сигнал соответствующей цифрой:

$ kill -9 PID

2. Мы можем указать сигнал с его именем:

$ kill -SIGKILL PID

3. Мы можем указать сигнал без SIG в имени.

$ kill -kill PID

Все эти команды выполняют одну и ту же задачу.

Параметр ПИД

PID — это идентификационный номер процесса. В Linux и Unix-подобных системах каждому процессу, выполняемому системой, присваивается идентификационный номер процесса (далее именуемый PID). Чтобы убить процесс, нужно знать его PID. Чтобы найти PID для данного процесса, мы можем использовать следующие команды.

$ pidof [process name]

$ pgrep [process name]

Когда вы используете эти две команды в командном терминале Ubuntu, вы получаете следующий результат.

Использование команды «Убить»

Теперь, когда вы поняли синтаксис, мы можем выполнить команду Kill. Для примера мы будем использовать Kill on Thunderbird Mail — предустановленную программу в Ubuntu. Сначала мы идентифицируем его PID, а затем завершим процесс с помощью сигнала SIGTERM.

Сначала откройте командный терминал Ubuntu. После этого выполните следующую команду:

$ pgrep thunderbird

Вы должны получить результат, аналогичный тому, который мы получили на изображении ниже:

Как вы теперь знаете, PID Thunderbird Mail запускает следующую команду для завершения процесса.

$ kill -SIGTERM 7075

Или

$ kill -15 7075

Когда вы нажмете Enter, вы заметите, что процесс и его окно больше не существуют. Вы также можете завершить несколько процессов вместе, одновременно введя PID процессов.

$ kill -[signal] PID1 PID2…..PIDN

Кроме того, пользователи могут завершить процесс, используя команды kill и pidof/pgrep в одной строке. Синтаксис такого расположения:

$ kill -[signal] $pgrep [process name]

Причины, по которым Kill может не сработать

Как указывалось ранее, сигналом по умолчанию, отправляемым с командой KILL, является SIGTERM. SIGTERM, по сути, уведомляет процесс о том, что он должен очиститься и завершиться. Это «хороший» способ завершить или убить процесс. Однако с некоторыми процессами хороший способ может не сработать.

Если вы заметили, что процесс, который вы приказали завершить, все еще выполняется после использования сигнала SIGTERM, не беспокойтесь, так как это обычное осложнение, возникающее при использовании Kill. Как мы уже говорили, это может иногда происходить и с определенными процессами.

Чтобы избавиться от этой проблемы, вы можете использовать сигнал SIGKILL для полного завершения процесса. Сигнал SIGKILL позволяет системе взять дело в свои руки. Так что, если вы встретите такую щекотливую ситуацию, вы всегда сможете выйти из нее с помощью сигнала SIGKILL или -9.

Важно, чтобы вы использовали SIGKILL экономно и в ситуации, которую SIGTERM не может решить. SIGTERM остается по умолчанию и самым безопасным; следовательно, лучший способ завершить процесс.

Команда Killall

Команда Kill является родной как для Linux, так и для других операционных систем на основе Unix, но команда Killall предназначена только для пользователей Linux. Эта команда позволяет пользователю завершить процесс, используя имя процесса. Нет необходимости находить PID процесса. Синтаксис команды Killall:

$ killall -[signal] [process name]

Эта команда может послужить хорошей альтернативой, если по какой-то причине Kill у вас не работает даже после прописанных решений.

Заключение

В этой статье вы узнали о команде Kill, ее назначении, синтаксисе, параметрах и использовании. Кроме того, мы увидели, что может привести к неправильной работе команды «Убить», и устранили эти проблемы. Надеюсь, это было для вас информативным и интересным чтением, и мы решили все проблемы, которые у вас возникали с этой командой.

Статьи по данной тематике: