Как отключить процесс по pid linux

Как завершить процесс в Linux. Команды kill, pkill,killall

В операционных системах Linux есть команда Kill, прерывающая процесс. Она позволяет серверу продолжать работу после серьезных изменений и обновлений без необходимости перезагрузки. Это одно из важнейших преимуществ Linux и одна из причин того, почему она установлена на 90% серверов в мире. Команда kill отправляет процессу специальный сигнал. Ее можно запустить различными способами, непосредственно из командной строки или из скрипта.

Синтаксис

Использование команды kill из /usr/bin предоставляет дополнительную возможность прервать процесс по его имени при помощи pkill. Стандартный синтаксис команды kill следующий:

Для команды kill существует около 60 сигналов, но основные значения следующие:

Имя сигнала Номер сигнала Действие
SIGHUP 1 Отключить
SIGKILL 9 “Убить”
SIGTERM 15 Прервать

SIGTERM используется по умолчанию. Это самый безопасный способ прерывания процесса, когда приложению отправляется запрос, который может быть обработан или проигнорирован. SIGHUP — менее безопасный способ. SIGKILL — наименее безопасный вариант, прерывание процесса без сохранения, этот сигнал не может быть проигнорирован или перехвачен.
Идентификаторы процессов
Чтобы прервать (“убить”) процесс, нам нужно знать его идентификатор (Process ID или PID). Он генерируется автоматически при запуске каждой программы и есть у каждого процесса в Linux. Первый процесс, запускаемый при загрузке Linux — init, поэтому в большинстве случаев ему присваивается идентификатор ‘1’.

Init — системный процесс, его нельзя прервать таким образом. При получении сигнала он сам решает, позволить ли себя прервать, таким образом, команда kill становится просто запросом на отключение системы. Это сделано для того, чтобы исключить случайное прерывание системных процессов.

Увидеть все запущенные процессы и соответствующие им идентификаторы можно при помощи следующей команды:

Для получения идентификатора конкретного процесса можно воспользоваться командой pidof, которой в качестве аргумента задается его имя.

Также можно сделать фильтрацию с помощью grep

Примеры

Прежде чем перейти непосредственно к исполнению команды kill, следует сделать ряд важных замечаний:

  • Пользователь может прервать любой свой процесс.
  • Пользователь не может прервать процесс другого пользователя..
  • Суперпользователь (root) может прервать системный процесс и процесс любого пользователя.
  • Пользователь не может прервать системный процесс

Чтобы “убить” процесс с указанным PID, нужно выполнить следующую команду (приведен пример для процесса mysqld из предыдущего раздела):

Будет “убит” процесс с PID=1684, то есть mysqld.

Можно использовать не только номер, но и название сигнала/ Например, для запроса на прерывание, который можно обработать или проигнорировать:

Аналогично, команда kill -SIGKILL PID эквивалентна команде # kill -9 PID

Для прерывания нескольких процессов можно указать их идентификаторы через пробел:

Прерывание процесса по имени. Команда pkill

Для прерывания процесса по имени, а не идентификатору, используется команда pkill. Нужно внимательно вводить имя процесса, так как прерывание не того процесса может привести к сбоям:

Если у процесса слишком много экземпляров и дочерних процессов, существует команда killall, которой в качестве аргумента также задается имя процесса.

Для прерывания всех экземпляров mysqld с дочерними процессами воспользуйтесь следующей командой:

Читайте также:  Как удалить windows через bios с ноутбука

Далее можно проверить состояние процесса (запущен он или нет), например:

Команда killall

Еще одна полезная команда для завершения процессов, это команда killall. Эта команда также как и pkill может завершить все процессы имеющие одно имя

А также весьма полезна бывает когда нужно завершить все процессы какого нибудь пользователя.

Заключение

Мы разобрали, как прерывать процессы в Linux и рассмотрели несколько используемых для этого команд. Эти команды следует применять с большой осторожностью, так как неосмотрительное прерывание процесса может привести к системным сбоям или потере важных данных. Для более подробной информации, различных вариантов передаваемых сигналов и других опций можно обратиться к соответствующим man-страницам.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

Kill: Завершение неконтролируемых процессов

Вы усердно боретесь с особо заковыристым приложением Линукс. Продираясь через дебри документации, запускаете команды и правите конфигурационные файлы. Все работает, и жизнь прекрасна. Как вдруг вас ошарашивает сообщение «send the process a SIGHUP» (пошлите процессу SIGHUP).

По инерции вы движетесь дальше. Что это за SIGHUP такой, и как его посылают? Вы почти уверены, что это не команда, но, на всякий случай, пробуете. Нет, не то. Перечитываем ман к приложению:

Когда получен сигнал о том, что программа зависла — SIGHUP, sshd перечитывает свой конфигурационный файл путем запуска самой себя с теми же именем и опциями, с которыми была первоначально запущена, например, /usr/sbin/sshd.

Программисты против пользователей

Сигналы и контроль над процессами

Сигналы нужны для того, чтобы взаимодействовать с процессами и демонами. Процессом называется любое активное действие. Демоны являются фоновыми (background) процессами, и до поры скрыты. Они ждут либо события, на которое они отреагируют, либо наступления времени, назначенного для выполнения некоего задания по расписанию. О наступлении этого события они узнают, получая сигнал от какого-то другого процесса. Каждая программа должна иметь в своем коде обработчик сигналов, чтобы отслеживать (перехватывать) сигналы и правильно реагировать на них. Страница руководства man signal описывает всевозможные сигналы и их действия. Сигналы посылают при помощи команды kill («убить»). Команда kill -l выводит список сигналов и их номеров.

Все демоны и процессы имеют Идентификатор Процесса (PID). PID процесса можно узнать при помощи команды ps:

В приведенном выше примере, вывод команды сильно сокращен — в вашей системе вы увидите куда больше строк и столбцов. Если какой-нибудь процесс «ворует» мощность вашего процессора или вашу память, вы увидите это в столбцах %CPU и %MEM.

Еще быстрее «зарвавшийся» процесс можно обнаружить при помощи команды top. В ней, по умолчанию, процессы, потребляющие больше ресурсов процессора, расположены в верхних строках таблицы. Мы можем немного поиграть с программой top при помощи команды yes:

$ yes carla is teh awesum

Эта команда станет повторять «carla is teh awesum» с большой скоростью, пока вы ее не остановите. Она загонит процент использования процессора в красную зону:

Интересно, что ответственность за разбазаривание мощности CPU ложится на консоль, а не на программу yes, так как yes работает внутри консоли. Если вы перейдете на «истинную» консоль (Ctrl+Alt+F2), то там увидите программу yes с большими цифрами потребления мощности процессора и использования памяти.

Существует несколько способов остановить yes. Если вы перейдете обратно в шелл, где она работает, просто нажмите Ctrl+C. Вы можете также остановить ее при помощи команды kill в другом шелле, как по PID, так и по имени:

$ kill 22236
$ killall yes

Ctrl+C посылает с клавиатуры сигнал SIGINT (2), или завершающее прерывание (terminate interrupt). kill и killall, оба, шлют по умолчанию SIGTERM (15). SIGTERM (15) может быть перехвачен и, либо игнорирован, либо интерпретирован иначе. Так что, в случае непредсказуемой работы, вы можете не добиться завершения процесса.

Читайте также:  Windows media player classic зависает

Применяя команду kill к родительскому процессу, вы, как правило (но не всегда), завершаете дочерний вместе с ним. Как узнать, какой процесс является дочерним? Используйте команду ps с опцией -f :

Вернемся к нашим SIGHUP’ам

# killall -HUP ‘process-name’

Как видите, можно использовать PID или имя процесса, а также имя или номер сигнала.

Зачем применять все эти команды, когда можно перезапустить процессы при помощи команды /etc/init.d/foo restart? Ведь предпочтительней контролировать сервисы с помощью их файлов init, так как такой контроль обычно включает санацию, проверку ошибок и другие функции. Если говорить честно, то главная причина использовать команду kill и сигналы состоит в том, чтобы остановить зависший или сбойный процесс как можно аккуратнее, и не прибегать к перезагрузке или завершению сеанса.

Применение команды kill к процессам

kill -STOP ‘pid’
SIGSTOP (19) останавливает процесс, не «убивая» его.

kill -CONT ‘pid’
SIGCONT (18) перезапускает остановленный процесс.

kill -KILL ‘pid’
SIGKILL (9) форсирует немедленное завершение процесса, и не производит никакой чистки.

kill -9 -1
Завершает все ваши процессы (которыми вы владеете).

SIGKILL и SIGSTOP не могут быть перехвачены, блокированы или игнорированы; остальные могут. Это ваше «большое ружье», последнее средство обороны.

Команда kill, встроенная в Bash

$ type -all kill
kill is a shell built-in
kill is /bin/kill

Маловероятно, что у вас возникнут конфликты или странное поведение программ, но на всякий случай выбирайте /bin/kill.

Не поленитесь получше познакомиться с большим миром команды kill, изучив приведенные ниже ресурсы. Это предоставит вам возможность решать возникающие проблемы путем тонкого хирургического вмешательства, не прибегая к перезагрузке системы при каждом сбое программы.

Ресурсы

  • Глава 7 «Starting and Stopping Linux», Поваренная книга Линукс (the Linux Cookbook)

bash (1) — GNU Bourne-Again Shell

yes (1) — повторно выводит строку, пока не будет остановлена

signal (7) — список сигналов

ps (1) — мгновенный снимок идущих процессов

kill (1) — посылает сигнал процессу

killall (1) — «убивает» процесс по имени

pkill (1) — ищет или дает сигнал процессам на основе имени или других атрибутов

skill (1) — посылвет сигнал, либо рапортует о статусе процесса

  • xkill (1) — «убивает» клиента по его Х ресурсу
  • Источник

    Работа с процессами в Linux

    Список процессов

    Вывести на экран список текущих процессов, запущенных пользователем, можно командой:

    Чтобы посмотреть список всех процессов с дополнительной информацией, вводим:

    Мы увидим, примерно, следующее:

    USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
    root 661 0.0 0.0 4072 8 tty1 Ss+ Jul03 0:00 /sbin/mingetty
    root 662 0.0 0.0 4072 8 tty2 Ss+ Jul03 0:00 /sbin/mingetty
    root 16355 0.0 0.0 171636 3308 pts/0 S 15:46 0:00 sudo su
    root 16366 0.0 0.0 140896 1556 pts/0 S 15:46 0:00 su
    root 16368 0.0 0.0 108316 1944 pts/0 S 15:46 0:00 bash
    root 18830 0.0 0.0 110244 1172 pts/0 R+ 16:20 0:00 ps u

    • USER — учетная запись пользователя, от которой запущен процесс.
    • PID — идентификатор процесса.
    • %CPU — потребление процессорного времени в процентном эквиваленте.
    • %MEM — использование памяти в процентах.
    • VSZ — Virtual Set Size. Виртуальный размер процесса (в килобайтах).
    • RSS — Resident Set Size. Размер резидентного набора (количество 1K-страниц в памяти).
    • TTY — терминал, из под которого был запущен процесс.
    • STAT — текущее состояние процесса. Могут принимать значения:
      1. R — выполнимый процесс;
      2. S — спящий;
      3. D — в состоянии подкачки на диске;
      4. T — остановлен;
      5. Z — зомби.
      6. W — не имеет резидентных страниц;
      7. Дмитрий Моск — IT-специалист.
        Настройка серверов, компьютерная помощь.

    Как управлять процессами в операционной системе Linux

    Источник

    Как убить процесс на любом дистрибутиве Linux

    Если вы являетесь новым пользователем Linux любого дистрибутива, вы, вероятно, не знаете, как использовать одну из основных команд, которая помогает нам завершать запущенные процессы.

    Операционные системы, основанные на Unix, включают команду Kill, полезную для уничтожения тех процессов, которые застряли или которые мы больше не хотим запускать без перезагрузки нашего компьютера или сервера.

    Команда Kill отправляет сигналы разных типов, которые позволяют завершать процессы или группы процессов.

    Если тип сигнала не указан, будет отправлен сигнал TERM, который является параметром по умолчанию.

    Примечание для пользователей среднего уровня: Команда может быть внешней (расположена в /bin/kill) или внутренней (более поздние оболочки) в зависимости от типа оболочки Linux.

    В любом случае, его использование очень похоже.

    Типы командных сигналов KILL

    Наиболее распространенными типами сигналов являются следующие

    • SIGHUP: будет использоваться, если консоль не отвечает или если контроль над процессом был потерян. Этот сигнал используется для перезагрузки файлов конфигурации процесса, а также возможных файлов журнала того же самого.
    • SIGKILL: сигнал, чтобы остановить процесс. Это последняя надежда завершить процесс, когда он не отвечает. Это не чистый способ завершить процесс, и поэтому никакие данные не будут сохранены.
    • SIGTERM: Это самый быстрый способ закрыть процесс. Это сигнал по умолчанию.

    Права, необходимые для завершения процесса

    • Вы можете завершить только свои собственные процессы.
    • Пользователь root сможет убить все процессы, системные процессы и любых других пользователей.

    Синтаксис команды KILL

    Если вы хотите завершить несколько процессов одновременно:

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

    Примеры команд Kill

    Давайте рассмотрим пример, когда вы хотите завершить процесс Apache httpd:

    Шаг № 1: Найти PID процесса.

    Первое, что вы должны сделать, когда хотите прекратить любой процесс, – это найти его PID.

    Для этого вы можете использовать команды ps или pidof.

    Эта команда выдаст вам PID, в данном случае это 22298, который является Идентификатором процесса, хотя в результате вы можете получить список идентификаторов, поскольку у процесса может быть несколько экземпляров.

    Вы также можете запустить следующую команду, чтобы найти PID:

    Шаг № 2: Убить процесс с помощью PID.

    PID 22298 – это тот, который назначен процессу httpd.

    Чтобы завершить процесс и закрыть сервер Apache, вам нужно передать PID:

    Это завершит процесс с PID 22298, что вы можете проверить, если вы снова используете команду pidof или команду ps

    Если мы не будем указывать какой-либо сигнал сигнал SIGTERM (-15) будет использоваться по умолчанию, поэтому следующие команды равны:

    Если сигнала SIGTERM (-15) недостаточно, например, когда сокеты Apache открыты, мы можем использовать сигнал SIGKILL (-9):

    Этот сигнал гарантирует, что процесс будет завершен, прерывая выполнение любой задачи.

    Если в Apache есть несколько запущенных процессов, мы можем устранить их все сразу:

    Команда Killall C

    В Linux у нас также есть команда killall для уничтожения процессов по имени, хотя эта команда Unix имеет другую функцию.

    Это закроет все экземпляры процесса Apache httpd в Linux.

    Однако в Unix эта команда завершит все процессы, поэтому лучше не запутаться при ее использовании.

    Знаете ли вы какой-либо другой способ убить процессы в Linux или столкнулись с проблемами, используя любую из приведенных выше команд?

    Источник

    Читайте также:  Draftsight для mac os
    Оцените статью