Как закрыть фоновый процесс linux

Содержание
  1. Как управлять фоновыми процессами в Linux
  2. bg: перемещение задачи в фон
  3. Как сразу приступить к выполнению команды в фоне
  4. jobs: команда для проверки задач в текущем терминале
  5. kill% n: прекращение выполнения задания с идентификатором n
  6. fg: команда для перемещения задачи в интерактивный режим
  7. Команда ps позволяет увидеть все процессы
  8. Выводы
  9. Как убить процесс Linux
  10. Как происходит завершение процесса?
  11. Как убить процесс Linux?
  12. Как завершить процесс с помощью pkill
  13. Как остановить процесс с помощью killall
  14. Выводы
  15. Как убить или прекратить процесс Linux: ультимативное руководство.
  16. Мастер управления неотзывчивыми процессами в Linux
  17. Различные методы убийства мертвого процесса Linux
  18. Завершить неотвечающий процесс из командной строки
  19. Узнайте информацию о PPID
  20. Способ 1: использование команды ps
  21. Способ 2: Использование команды pstree
  22. Способ 3: использование команды pgrep
  23. Способ 4: Использование команды pidof
  24. Способ 5: использование команды top
  25. Убить не отвечающий процесс Linux
  26. Способ 1: использование команды kill
  27. Способ 2: использование команды pkill
  28. Способ 3: использование команды killall
  29. Способ 4: использование удобных однострочников
  30. Способ 5: уничтожение нескольких процессов с помощью шелл-скриптов Linux
  31. Завершить неотвечающий процесс из графического интерфейса
  32. Способ 1: использование приложения xkill
  33. Способ 2. Использование приложения System Monitor в Ubuntu
  34. Послесловие

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

Если вы только начинаете работать с Linux и уже пробовали вводить команды в терминале, вы могли заметить, что для ввода каждой новой команды вам приходится ждать, пока уже начатый процесс завершится. Так происходит потому, что по умолчанию при запуске команды процесс начинается в активном окне терминала, — пишет сайт hexx.in.ua в своем переводе статьи «How to manage background processes in Linux».

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

Но сначала давайте разберемся, что такое фоновый и приоритетный процесс.

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

Примером может быть выполнение любой команды в текущей сессии.

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

Наиболее распространенный пример процесса, работающего в фоне, — веб-сервер.

Давайте попробуем запустить команду vmstat.

Эта команда показывает использование памяти и cpu в режиме реального времени. В качестве опции указываем 5 — это задержка перед выводом обновленных данных. Команда каждые 5 секунд будет выводить новую строку с данными, пока вы не прервете ее выполнение (пока не завершите начатый процесс). Для этого надо нажать CTL + C. А если вы хотите поставить процесс на паузу или остановить, надо нажать CTL + Z.

bg: перемещение задачи в фон

Предположим, вы хотите переместить в фон задание, выполнение которого уже началось (чтобы можно было делать в терминале что-то другое). Для этого надо нажать CTL + Z, а затем запустить команду bg (сокращение от background).

Давайте запустим выполнение какой-то приоритетной задачи. Например, будем записывать CPU-статистику в файл. Как видите, мы не можем ввести какую-то другую команду, поскольку эта задача выполняется в активном окне терминала (оно приоритетное).

Давайте поставим эту задачу на паузу, нажав CTL + Z, а затем выполним команду bg.

Теперь эта задача выполняется в фоне, а терминал свободен для введения новых команд.

Как сразу приступить к выполнению команды в фоне

Чтобы процесс запустился в фоне, после команды надо поставить знак &:

jobs: команда для проверки задач в текущем терминале

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

Номера в квадратных скобках [n] это номера (или идентификаторы) задач. Нумерация начинается с единицы. Знак «+» указывает на процесс, который был запущен последним, а «-» — на предпоследний процесс.

Если вы хотите увидеть идентификаторы самих процессов, надо использовать опцию -l:

Номера 10216 и 11122 — это идентификаторы процессов.

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

  • -l — вывести список идентификаторов процессов в дополнение к обычной информации
  • -n — перечислить только процессы, изменившие статус с последнего сообщения
  • -r — ограничить вывод только запущенными задачами
  • -s — ограничить вывод только остановленными задачами.

kill% n: прекращение выполнения задания с идентификатором n

Для прерывания заданий используется команда kill. Чтобы указать, какое именно задание надо прекратить выполнять, используется знак %, за которым следует номер задания.

Как видите, теперь у нас только один процесс в фоне. Причем знак «+» показывает, что это последняя из запущенных задач.

fg: команда для перемещения задачи в интерактивный режим

Чтобы переместить задачу в активное окно терминала (на передний план), используется команда fg (сокращение от foreground). По умолчанию (то есть, если не указать никаких опций), на передний план переместится процесс, который был запущен последним.

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

Команда ps позволяет увидеть все процессы

Чтобы увидеть все активные процессы, используйте команду ps. При этом можно добавить следующие опции:

  • ps ax — чтобы увидеть все процессы, недавно активные в системе. Список будет очень длинным, поэтому добавьте в конвейер less или more.
  • ps T — чтобы увидеть все процессы, выполняемые в текущем терминале.

Выводы

Мы рассмотрели команды, которые позволяют управлять фоновыми и приоритетными процессами:

  • bg и fg — для перемещения задач в фон и обратно, в активное окно;
  • jobs — для вывода списка активных задач в текущем терминале;
  • kill — для прерывания процесса;
  • ps — для вывода списка активных и запущенных процессов.
Читайте также:  Ограничение скорости linux htb

Мы также научились запускать задачи в фоне, добавив к команде знак &.

Источник

Как убить процесс Linux

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

В этой статье мы рассмотрим несколько самых распространенных способов завершить процесс Linux. Опишем подробно как происходит остановка процесса и как все сделать правильно.

Как происходит завершение процесса?

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

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

  • SIGINT — самый безобидный сигнал завершения, означает Interrupt. Он отправляется процессу, запущенному из терминала с помощью сочетания клавиш Ctrl+C. Процесс правильно завершает все свои действия и возвращает управление;
  • SIGQUIT — это еще один сигнал, который отправляется с помощью сочетания клавиш, программе, запущенной в терминале. Он сообщает ей что нужно завершиться и программа может выполнить корректное завершение или проигнорировать сигнал. В отличие от предыдущего, она генерирует дамп памяти. Сочетание клавиш Ctrl+/;
  • SIGHUP — сообщает процессу, что соединение с управляющим терминалом разорвано, отправляется, в основном, системой при разрыве соединения с интернетом;
  • SIGTERM — немедленно завершает процесс, но обрабатывается программой, поэтому позволяет ей завершить дочерние процессы и освободить все ресурсы;
  • SIGKILL — тоже немедленно завершает процесс, но, в отличие от предыдущего варианта, он не передается самому процессу, а обрабатывается ядром. Поэтому ресурсы и дочерние процессы остаются запущенными.

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

Сначала Ctrl+C, если это возможно, затем SIGTERM — он хоть и завершает процесс, но делает эту культурно, и только в крайнем случае SIGKILL. А теперь рассмотрим как убить процесс по pid Linux на практике. Если вы всегда используете SIGKILL, тогда на ум приходит такая картинка:

Как убить процесс Linux?

Для передачи сигналов процессам в Linux используется утилита kill. Ее синтаксис очень прост:

$ kill -сигнал pid_процесса

Сигнал представляет собой один из выше перечисленных сигналов для завершения процесса. По умолчанию, если этот параметр не указан, используется сигнал SIGTERM, что является очень правильно. Также нам нужно указать какой процесс нужно завершить. Для этого используется уникальный идентификатор процесса — PID.

Допустим, у нас выполняется утилита ping. Мы хотим ее завершить с помощью kill. Тогда, сначала мы узнаем ее идентификатор с помощью команды ps:

ps aux | grep ping

В первой строчке отобразится сама утилита ping, а во второй сама программа ps. Берем нужный PID и завершаем процесс с помощью SIGTERM:

kill -TERM 20446

И только если после этой команды процесс продолжил висеть, а это вы можете проверить, выполнив ps. Только теперь можно выполнить SIGKILL:

kill -KILL 20446

Теперь снова проверяем:

Если процесс запущен от суперпользователя, то, естественно, вам нужно использовать sudo. Не всегда удобно уничтожать процесс по его PID, как минимум, потому, что вам этот PID нужно еще узнать. Мы могли бы нагородить сложных конструкций с использованием xargs, чтобы вычислять автоматически pid по имени процесса и сразу же его завершать, но в этом нет необходимости. Уже существуют специальные утилиты.

Как завершить процесс с помощью pkill

Утилита pkill — это оболочка для kill, она ведет себя точно так же, и имеет тот же синтаксис, только в качестве идентификатора процесса ей нужно передать его имя. Утилита сканирует директорию proc и находит PID первого процесса с таким именем, затем отправляет ему SIGTERM. Таким образом, вы можете убить процесс по имени Linux. Например, если мы хотим завершить тот же ping:

Также можно вручную задать тип сигнала:

pkill -TERM ping

Вместо ps, вы можете использовать утилиту pgrep для поиска pid процесса, убедимся что наша программа завершена:

Но если вам программа создала несколько процессов, например, браузер chromium или firefox создают отдельный процесс для каждой из вкладок, то эта утилита мало чем поможет. Тут нужен следующий вариант.

Как остановить процесс с помощью killall

killall работает аналогично двум предыдущим утилитам. Она тоже приминает имя процесса в качестве параметра и ищет его PID в директории /proc. Но эта утилита обнаружит все процессы, с таким именем и завершит их. Например:

Как видите, запущено несколько процессов, осталось остановить процесс Linux с помощью killall:

Команда завершит все запущенные утилиты ping, вы можете убедиться в этом еще раз выполнив pgrep:

Выводы

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

Источник

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

Многопроцессорные операционные системы, такие как Linux и BSD, используют несколько методов для максимальной загрузки ЦП. Процесс — это просто исполняемая программа. Поскольку в любой момент времени в Linux запущено значительно больше одного процесса, управление ими чрезвычайно важно. Пользователи регулярно сталкиваются с такими проблемами, как ограничение ресурсов процессора при запуске слишком большого количества программ. Подобные ситуации возникают, когда процессор не справляется с растущим числом процессов. Хотя это не полностью зависит от мощности вашего процессора, работа с зависшими процессами или процессами зомби может быть довольно неприятной. Чтобы облегчить вам жизнь в таких случаях, мы описываем здесь некоторые стандартные способы уничтожения таких процессов.

Читайте также:  Инсталлятор php для windows

Мастер управления неотзывчивыми процессами в Linux

Вы узнаете несколько способов как в Linux завершить процесс, который не подает признаков жизни. Если вы юзали Windows, скорее всего вам знаком шорткат Ctrl + Alt + Delete. Точно так же пользователи Mac имеют метод Command + Option + Escape для уничтожения замороженных процессов. Linux гораздо более универсален, чем его аналоги, и предлагает более одного метода для устранения мертвых процессов.

Различные методы убийства мертвого процесса Linux

В основном мы опишем два метода убийства зомби-процессов. Мы будем использовать терминал Linux для первого метода. Для этого сначала нужно идентифицировать id процесса, он же PID, от английского process identifier – идентификатор процесса. После успешного получения мы сможем использовать этот PID, посылая сигнал для уничтожения программы ориентируясь на номер-идентификатор.

Вы также узнаете, как обкашливать такие вопросики, используя графический интерфейс пользователя. Для этого мы собираемся использовать приложение «Системный монитор», доступное в Ubuntu. Хотя это приложение GNOME, аналогичные инструменты доступны и для других сред Linux.

Завершить неотвечающий процесс из командной строки

Существует несколько инструментов для завершения неотвечающего или зависшего процесса из командной строки, включая kill, pkill и killall. Эти команды работают, посылая определенные сигналы не отвечающим процессам. Вам понадобится PID, чтобы вы могли отправить им требуемый завершающий сигнал.

PID или идентификатор процесса — это уникальный номер, который идентифицирует процесс. Эти номера генерируются ядром Linux непосредственно во время выполнения процессов, и диспетчер операционной системы управляет их процессорной активностью. Поэтому, когда вы вызываете приложение, ядро ​​сначала запускает необходимые процессы и присваивает им эти уникальные значения PID. С процессом может быть связано несколько PID. Более того, у каждого процесса есть один родительский процесс с уникальным PPID (идентификатор родительского процесса).

Итак, если вы сможете узнать этот PPID, то сможете отправлять сигнал уничтожения с помощью программ, разработанных для этой цели. Ниже вы узнаете, как проверить запущенные процессы в Linux и определить их PPID из терминала.

Узнайте информацию о PPID

Вы можете узнать PPID процесса, используя несколько команд управления процессами в Linux, таких как pidof, pstree и pgrep. Давайте рассмотрим их одну за другой и посмотрим, как получить PID процесса Linux.

Способ 1: использование команды ps

Команда ps в Linux отображает все запущенные процессы вместе с другой информацией о процессах, такой как PID, в терминале. Мы можем использовать эту команду для вывода списка всех процессов, а затем отфильтровать определенный процесс с помощью команды grep в Linux. Она должна показать нам номер идентификатора процесса, который нам и требуется.

Давайте подробнее поговорим о том, что происходит на демонстрации выше. Во-первых, мы запустили в фоновом режиме текстовый редактор Nano. Затем мы использовали команду ps вместе с командой grep, чтобы узнать PPID этого редактора. Вывод может содержать несколько идентификаторов процессов, но нас интересует только первый, поскольку это наш PPID. Мы также можем использовать команду Linux awk, чтобы узнать эту информацию, как показано ниже.

Эта команда более гибкая, так как она отфильтрует всю несущественную информацию, и покажет только номер PPID, который мы ищем.

Способ 2: Использование команды pstree

Команда pstree предоставляет нам древовидное представление всех запущенных процессов. Она предоставляет графическое представление списка задач Linux из окна терминала. С помощью этой команды вы можете просмотреть PPID или, при желании, информацию о всех PID процесса. Посмотрите приведенные ниже примеры, чтобы узнать, как использовать pstree для поиска PPID определенного процесса.

Теперь подробности. Во-первых, мы породили процесс в фоновом режиме с помощью первой команды. Затем вторая команда получает PPID этого процесса с помощью команды grep в Linux. Наконец, третья команда показывает нам, как получить это же значение с помощью команды awk.

Способ 3: использование команды pgrep

Команда pgrep является одной из самых простых команд управления процессами в Linux. Он проверяет список всех запущенных процессов и выводит PPID процесса. Она работает путем сопоставления регулярных выражений и очень хорошо подходит для написания шелл-скриптов Linux.

Мы породили nano-процесс аналогично предыдущим примерам. Затем мы получили его PPID с помощью команды pgrep. Как только мы получим это значение, мы сможем выполнить задачу уничтожения мертвого процесса максимально легко.

Способ 4: Использование команды pidof

Команда pidof — это еще один простой, но полезный способ определения PPID процесса Linux. Он отображает как PPID, так и все другие PID, связанные с процессом. Ознакомьтесь с приведенной ниже демонстрацией, чтобы увидеть, как использовать ее на практике.

При использовании команды pidof для проверки запущенных процессов в Linux вы часто будете видеть несколько PID. Обычно в таких случаях первый или последний номер — это PPID, в зависимости от того, находятся они в порядке возрастания или в порядке убывания. Вы можете использовать опцию -s pidof, чтобы избежать этого. Так будет отображено только значение PPID.

Способ 5: использование команды top

Команда top обеспечивает представление в реальном времени всех запущенных процессов в Unix-подобных операционных системах. Вы можете использовать её, чтобы отобразить список задач Linux в вашем терминале и узнать информацию о PID определенного процесса.

Используйте следующие команды для получения PPID определенного процесса из выходных данных команды, приведённой выше.

Поскольку top обеспечивает вывод в реальном времени вместо выгрузки статических данных на экран, мы использовали опцию -n1 и -b для получения статического вывода. Затем вы можете получить информацию о PPID с помощью команды grep или awk.

Читайте также:  Операционные системы взлом паролей windows

Убить не отвечающий процесс Linux

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

Способ 1: использование команды kill

Простая и надежная как лом, команда kill, благодаря этим своим свойствам, широко используется администраторами Linux. Ей требуется только PID процесса и сигнал. Ядро убивает / останавливает выполнение процесса на основе этого сигнала. Вы можете использовать следующую команду, чтобы просмотреть все доступные сигналы для команды kill.

Как видите, kill предлагает 64 различных сигнала. Однако в этом руководстве мы обсудим только два из них. Это сигнал 9 (SIGKILL) и сигнал 15 (SIGTERM). SIGTERM или сигнал 15 — это безопасный метод уничтожения не отвечающего процесса. SIGKILL или сигнал 9, с другой стороны, принудительно убивает процесс Linux.

Вышеприведенные команды эквивалентны, и они принудительно завершат процесс с PID 8631. Это PPID процесса «nano» в моей системе. Замените его на PID не отвечающего процесса в вашей системе.

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

Способ 2: использование команды pkill

Команда pkill является одной из самых универсальных команд управления процессами в Linux. Она позволяет нам уничтожать неотвечающий процесс на основе его имени, PID, владельца или других атрибутов. Это идеальный инструмент для начинающих пользователей или людей, которые не знакомы со многими стандартными командами терминала.

Вы можете использовать любую из перечисленных выше команд pkill для уничтожения зомби-процесса в Linux. Также команда pkill позволяет вам отправлять определенные завершающие сигналы.

Способ 3: использование команды killall

Команда killall позволяет пользователям уничтожать неотвечающие процессы на основе их имен. Так значительно проще, но, при не осторожном использовании, может вызвать серьёзные проблемы. Так как killall завершает процессы, основанные на именах, всегда есть шанс, что вы в конечном итоге убьете процесс случайно. Например, если в вашей системе доступны разные версии nano, первая команда в демонстрации ниже уничтожит их все.

В первом примере показано базовое использование команды killall в Linux. Вторая команда сообщит, успешно ли выполнено задание на уничтожение, а третья команда запросит подтверждение у пользователя, прежде чем убить процесс. По умолчанию killall использует сигнал SIGTERM для процессов уничтожения. Однако вы можете указать сигнал вручную, как показано в последнем примере.

Способ 4: использование удобных однострочников

Истинная красота Linux заключается в том, что он позволяет пользователям создавать сложные комбинации команд в зависимости от их потребностей. Чтобы продемонстрировать это, мы предлагаем вам ознакомиться с несколькими однострочниками в разделе ниже.

Теперь подробнее, в первом примере мы использовали интерполяцию оболочки для передачи PID процесса «nano» команде Linux kill. Второй пример использует несколько повседневных команд терминала и перенаправление ввода / вывода, чтобы завершить процесс. Вы сможете создавать свои собственные изящные однострочники, когда лучше освоитесь с терминалом Linux.

Способ 5: уничтожение нескольких процессов с помощью шелл-скриптов Linux

Иногда пользователи могут захотеть завершить более одного процесса. Мы можем легко автоматизировать такие задачи, написав простые сценарии оболочки. Следующий скрипт извлекает PPID процессов, которые вы хотите уничтожить, а затем завершает их, используя сигналы уничтожения.

Теперь сохраните этот файл и добавьте разрешение на выполнение, введя команду ниже.

Теперь вы можете передать этому сценарию имена процессов, которые вы хотите завершить.

Просто замените аргументы именами не отвечающих процессов Linux в вашей системе.

Завершить неотвечающий процесс из графического интерфейса

Вы также можете завершить неотвечающий процесс из GUI или window X. Мы обсудим два способа сделать это в следующем разделе.

Способ 1: использование приложения xkill

Современные дистрибутивы Linux используют оконную систему X window для предоставления конечному пользователю элегантного графического интерфейса. Существует простой инструмент под названием xkill, который позволяет юзерам закрывать неотвечающее окно графического интерфейса. Это возможно, поскольку в Linux окно заголовка приложения отделено от самого приложения.

Просто зайдите в эмулятор терминала Linux и введите xkill. Он превратит ваш курсор мыши в кнопку X, которую можно использовать для уничтожения любого окна GUI.

Теперь все, что вам нужно сделать, это просто щелкнуть по панели окна не отвечающего приложения, и оно будет убито и мгновенно исчезнет.

Способ 2. Использование приложения System Monitor в Ubuntu

Большинство основных дистрибутивов Linux поставляются с какими-то инструментами мониторинга графического интерфейса, которые позволяют пользователям «графически» завершать зависший процесс Linux. Например, приложение System Monitor в Ubuntu позволит нам интуитивно прекратить не отвечающий процесс. Вы можете просто выбрать мертвый процесс из списка процессов и уничтожить его, щелкнув правой кнопкой мыши по процессу и выбрав опцию уничтожения.

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

Послесловие

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

Источник

Оцените статью