Linux остановить фоновый процесс

Содержание
  1. Как остановить процесс Linux
  2. Сигналы как часть завершения процесса
  3. Синтаксис
  4. Особенности завершения процесса с использованием команды «pkill»
  5. Особенности завершения процесса с использованием команды «killall»
  6. Как запускать команды Linux в фоновом режиме
  7. How to Run Linux Commands in Background
  8. В этой статье мы поговорим о фоновых процессах Linux. Мы покажем вам, как запустить команду в фоновом режиме и как сохранить процесс работающим после закрытия сеанса оболочки.
  9. Запустите команду Linux в фоновом режиме
  10. Переместить процесс переднего плана в фон
  11. Поддерживать выполнение фоновых процессов после выхода из оболочки
  12. Альтернативы
  13. Screen
  14. Вывод
  15. Основы Linux от основателя Gentoo. Часть 2 (3/5): Управление процессами
  16. Управление процессами
  17. Запуск xeyes
  18. Остановка процесса
  19. fg и bg
  20. Использование «&»
  21. Несколько фоновых процессов
  22. Введение в сигналы
  23. SIGTERM и SIGINT
  24. Полное убийство
  25. nohup
  26. Используем ps для вывода списка процессов
  27. Просмотр «леса» и «деревьев»
  28. «u» и «l» опции ps
  29. Использование top
  30. renice
  31. Об авторах
  32. Daniel Robbins
  33. Chris Houser
  34. Aron Griffis

Как остановить процесс Linux

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

Такая задача может потребоваться в том случае, если программа зависла после запуска системного сервиса в фоновом режиме с помощью терминала, а не системы инициализации. На самом деле ситуаций может быть множество. Убить определенный процесс в ОС «Линукс» значительно проще, чем перезагрузить всю систему, установленную на персональном компьютере.

Сигналы как часть завершения процесса

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

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

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

Стоит отметить, что процессы в ОС «Линукс» могут реагировать не на все сигналы. Рекомендуется рассмотреть максимально подробно те, которые применяются при завершении процессов:

  • SIGINT. Этот сигнал является самым безобидным. Он будет отправлен процессу, который запущен из терминала путем сочетания клавиш «Ctrl+C». Процесс будет завершен правильно, а управление возвращается к пользователю.
  • SIGQUIT. Такой сигнал также отправляется путём сочетания клавиш, но распространяется на программу, запущенную в самом терминале. Сигнал сообщит ей, что необходимо срочное завершение. В данном случае программа корректно завершится или просто проигнорирует сигнал. Главное отличие от вышеописанного варианта – процесс сопровождается генерированием дампа памяти. Здесь используется сочетание клавиш «Ctrl+/».
  • SIGHUP. Данный сигнал сообщит определенному процессу, что соединение с терминалом управления прервано. Он отправляется не пользователем, а самой системой. Сигнал может возникнуть при закрытии доступа к интернету.
  • SIGTERM. Этот сигнал свидетельствует о немедленном завершении процессов, но обрабатывается с помощью специальных программ. Именно поэтому появляется возможность устранения всех дочерних процессов, освобождения ресурсов.
  • SIGKILL. Такой сигнал также немедленно завершает процессы. Главное отличие от предыдущего варианта – сигнал передаётся не на сам процесс, а на ядро, где в последующем обрабатывается. В этом случае ресурсы и дочерние процессы не завершаются в принудительном порядке.

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

Синтаксис

Чтобы передать предварительно выбранный сигнал определенному процессу в Linux, рекомендуется воспользоваться специальной утилитой kill. Она имеет весьма простой синтаксис:

Здесь можно использовать любой сигнал, который представлен в вышеописанном списке. Если данный параметр не задать в команде, «по умолчанию» будет использован SIGTERM. Именно он практически моментально завершит выбранную вами программу.

Стоит отметить, что перед запуском команды требуется определиться с процессом, который нужно завершить. Перед ним указывается уникальный идентификатор «pid».

К примеру, в операционной системе подключенный по ssh пользователь «ya». Нам необходимо завершить этот процесс, тем самым закрыть подключение по ssh с использованием утилиты kill. Первоначально требуется определить ее идентификатор с помощью команды «ps».

ps aux | grep ssh

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

Как видно на скриншоте, pid который нам нужен 2590. Завершим подключение пользователя «ya» с помощью сигнала SIGTERM.

Бывают различные ситуации. В некоторых случаях после введения вышеописанной программы процесс продолжает висеть в ОС «Линукс». Проверить его наличие можно также с помощью утилиты «ps» (процесс ее запуска описан выше). В данном случае можно воспользоваться более действенным сигналом SIGKILL, где запрос идет непосредственно через ядро всей системы. Необходимо ввести – kill -KILL 20445.

Читайте также:  Как устранить все неполадки windows

После ведения такой команды рекомендуется снова запустить утилиту «ps». Если вы обнаружите, что процесс запущен от имени пользователя, которого завершали прцесс ( в нашем случае это ya), потребуется дополнительное использование утилиты «sudo».

Особенности завершения процесса с использованием команды «pkill»

Главная отличительная особенность данной утилиты – вместо идентификатора процесса требуется ввести имя программы. Синтаксис и поведение будет аналогичным.

Утилита «pkill» отсканирует директорию и самостоятельно найдет ID с аналогичным именем. Только после этого будет подан сигнал SIGTERM. Например, закроем программу mc.

Особенности завершения процесса с использованием команды «killall»

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

Главная отличительная особенность – будут обнаружены и завершены все процессы, которые имеют такое имя.

При использовании утилит важно понимать, что к постановке задач требуется отнестись максимально ответственно. Если сделать что-то не правильно, могут возникнуть сбои в работе ОС «Линукс».

Источник

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

How to Run Linux Commands in Background

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

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

Что если выполнение команды занимает много времени, а вы хотите выполнять другие команды в это время? У вас есть несколько вариантов в вашем распоряжении. Наиболее очевидный и простой вариант — запустить новый сеанс оболочки и запустить в нем команду. Другой вариант — запустить команду в фоновом режиме.

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

Запустите команду Linux в фоновом режиме

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

Идентификатор задания оболочки (заключенный в квадратные скобки) и идентификатор процесса будут напечатаны на терминале:

Вы можете одновременно запускать несколько процессов в фоновом режиме.

Фоновый процесс будет продолжать записывать сообщения в терминал, из которого вы вызвали команду. Для подавления stdout и stderr сообщения используют синтаксис следующий:

>/dev/null 2>&1 означает перенаправление stdout на /dev/null и stderr к stdout .

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

Вывод включает в себя номер задания, идентификатор процесса, состояние задания и команду, запустившую задание:

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

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

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

Переместить процесс переднего плана в фон

Чтобы переместить запущенный процесс переднего плана в фоновом режиме:

  1. Остановите процесс, набрав Ctrl+Z .
  2. Переместите остановленный процесс в фоновом режиме, набрав bg .

Поддерживать выполнение фоновых процессов после выхода из оболочки

Если ваше соединение прерывается или вы выходите из сеанса оболочки, фоновые процессы завершаются. Есть несколько способов сохранить процесс после завершения сеанса интерактивной оболочки.

Одним из способов является удаление задания из управления заданиями оболочки с помощью disown встроенной оболочки:

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

Убедитесь, что задание удалено из таблицы активных заданий с помощью jobs -l команды. Для просмотра списка всех запущенных процессов, в том числе отключенных, используйте ps aux команду.

Другой способ сохранить процесс запущенным после выхода из оболочки — использовать nohup .

Команда nohup выполняет другую программу, указанную в качестве аргумента, и игнорирует все SIGHUP сигналы (зависания). SIGHUP это сигнал, который отправляется процессу, когда его управляющий терминал закрыт.

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

Вывод команды перенаправляется в nohup.out файл.

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

Альтернативы

Есть ряд программ, которые позволяют вам иметь несколько интерактивных сессий одновременно.

Screen

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

Читайте также:  При запуске windows открывается мой компьютер

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

Вывод

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

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

Источник

Основы Linux от основателя Gentoo. Часть 2 (3/5): Управление процессами

В этом отрывке рассмотрены команды управления процессами. Вы научитесь замораживать процессы, размораживать, отправлять в фоновый режим, изменять приоритет, просматривать запущенные процессы и жестоко их убивать. Введено понятие сигналов. Рассмотрены такие команды, как bg, fg, jobs, kill, nohup, nice, renice, ps и top.

Навигация по основам Linux от основателя Gentoo:
Часть I
  1. BASH: основы навигации (вступление)
  2. Управление файлами и директориями
  3. Ссылки, а также удаление файлов и директорий
  4. Glob-подстановки (итоги и ссылки)

Часть II

Управление процессами

Запуск xeyes

Для изучения управления процессами, какой-нибудь процесс необходимо сначала запустить. Убедитесь, что у вас запущен X (графический сервер — прим. пер.) и выполните следующую команду:

$ xeyes -center red

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

Остановка процесса

Чтобы вернуть приглашение, вы должны нажать Control-C (часто пишется как Ctrl-C или ^C):

Вы получили назад свое приглашение, но и окно xeyes исчезло. Фактически, процесс был «убит». Вместо завершения по Control-C, мы можем просто остановить процесс с помощью Control-Z:

На этот раз вы получите приглашение bash’a, а окно xeyes останется сверху. Если вы с ним немного поиграете, возможно заметите, что глаза заморожены на одном месте. Если окно xeyes будет перекрыто другим окном и затем снова открыто, вы увидите, что оно даже не перерисовалось. Процесс не делает ничего. Он на самом деле остановлен.

fg и bg

Чтобы процесс «растормошить» и запустить обратно, мы можем вывести его на передний план используя команду fg (от англ. foreground — прим. пер.):

$ fg
(test it out, then stop the process again)
Control-Z
$

А теперь продолжим его в фоне с помощью команды bg (от англ. backgroud — прим. пер.):

Прекрасно! Процесс xeyes сейчас запущен в фоновом режиме, а мы снова имеем приглашение bash.

Использование «&»

Если нам нужно сразу запустить xeyes в фоновом режиме (вместо использования Control-Z и bg), мы можем просто добавить «&amp» (амперсанд) в конец команды xeyes:

$ xeyes -center blue &amp
[2] 16224

Несколько фоновых процессов

Теперь в фоне у нас одновременно работают красные и синие xeyes. Мы можем просмотреть список заданий с помощью jobs:

Число в левой колонке — это порядковый номер задания, который bash присваивает ему при запуске. Плюс (+) у второго задания значит, что это «текущее задание», оно будет выведено на передний план при вводе fg. Вы также можете вывести на передний план конкретное задание указывая его номер; например, fg 1 сделает таковым красный xeyes. Следующая колонка это идентификатор процесса или сокращенно pid, любезно добавленный в вывод благодаря опции -l. Наконец, состояние обоих процессов «Running» (выполняется) и их командная строка справа.

Введение в сигналы

Чтобы убить, остановить, или продолжить процесс, Linux использует специальную форму взаимодействия, называемую сигналы. Отправляя сигнал некоторому процессу, вы можете его завершить, остановить, или сделать что-нибудь еще. Это то, что происходит на самом деле, когда вы нажимаете Control-C, Control-Z, или используете bg и fg — вы указываете bash отправить процессу определенный сигнал. Сигналы также можно отправить с помощью команды kill указав ей как параметр id процесса (pid):

Как можно заметить, kill не обязательно «убивает» процесс, хотя может и это. Используя опцию -s, kill может отправить процессу любой сигнал. Linux убивает, останавливает или продолжает процессы когда они получают SIGINT, SIGSTOP, или SIGCONT сигнал соответственно. Есть и другие сигналы, которые вы можете отправить процессам; некоторые сигналы могут обрабатываться внутри самих программ. Вы можете узнать о сигналах которые обрабатывает конкретная программа поискав в ее man’е секцию SIGNALS.

SIGTERM и SIGINT

Если вы хотите убить процесс, есть несколько вариантов. По-умолчанию, kill отправляет SIGTERM, который отличается от SIGINT отправляемого по Control-C, но обычно имеет тот же эффект:

Читайте также:  Screen orientation in windows

Полное убийство

Процесс может игнорировать оба сигнала, SIGTERM и SIGINT, либо по своему усмотрению, либо потому, что он остановлен, либо еще как-то «застрял». В этом случае, может быть необходимо использование большого молотка — сигнала SIGKILL. Процесс не может игнорировать SIGKILL:

nohup

Терминал в котором вы запускаете задания, называется терминалом управления заданиями. Некоторые шеллы (но не bash по-умолчанию), отправляют сигнал SIGHUP фоновым заданиям когда вы выходите, заставляя их завершаться. Для защиты процессов от такого поведения, используйте nohup когда запускаете процесс:

Используем ps для вывода списка процессов

Команда jobs, которую мы использовали ранее выводит только те процессы, которые были запущены в вашей сессии bash. Чтобы увидеть все процессы в вашей системе, используйте ps совместно с опциями a и x:

Здесь приведены только первые 5 процессов, поскольку обычно список процессов очень длинный. Команда дает вам «слепок» всего, что в данный момент выполняется на машине, однако в нем много лишней информации. Если бы вы, не указали ax, вы бы получили список только тех процессов, которые принадлежат вам, и которые есть в управляющем терминале. Команда ps x покажет все ваши процессы, даже те, которых нет в управляющем терминале. Если использовать ps a, то будет получен список процессов из терминалов всех пользователей.

Просмотр «леса» и «деревьев»

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

«u» и «l» опции ps

Опции u и l могут быть использованы в любой комбинации с опциями a, x с целью получения более подробной информации о процессах:

Использование top

Если вы обнаружили, что запускаете ps несколько раз подряд, пытаясь рассмотреть происходящие изменения, возможно вам стоит воспользоваться top. Программа top отображает постоянно обновляющийся список процессов, наряду с другой полезной информацией:

Каждый процесс имеет свое значение приоритета, которое Linux использует для разделения времени CPU. Вы можете указать приоритет процесса при его запуске, с помощью команды nice:

$ nice -n 10 oggenc /tmp/song.wav

С тех пор, как приоритет стал называться nice, он стал легче для запоминания, так, большее значение nice делает «хорошо» (nice — хорошо, замечательно; прим. пер.) другим процессам, позволяя им получить более приоритетный доступ к времени CPU. По-умолчанию, процессы запускаются с приоритетом 0, поэтому установка приоритета в 10 для oggenc значит, что он будет давать больше времени поработать другим процессам. Как правило, это означает, что oggenc даст возможность другим процессам выполняться со своей обычной скоростью, не зависимо от того, сколько времени процессора хочет сам oggenc. Вы могли видеть эти «уровни любезности» в колонке NI у ps и top ранее.

renice

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

$ renice 10 641
641: old priority 0, new priority 10

Спасибо Dmitry Minsky (Dmitry.Minsky@gmail.com) за перевод.

Об авторах

Daniel Robbins

Дэниэль Роббинс — основатель сообщества Gentoo и создатель операционной системы Gentoo Linux. Дэниэль проживает в Нью-Мехико со свой женой Мэри и двумя энергичными дочерьми. Он также основатель и глава Funtoo, написал множество технических статей для IBM developerWorks, Intel Developer Services и C/C++ Users Journal.

Chris Houser

Крис Хаусер был сторонником UNIX c 1994 года, когда присоединился к команде администраторов университета Тэйлора (Индиана, США), где получил степень бакалавра в компьютерных науках и математике. После он работал во множестве областей, включая веб-приложения, редактирование видео, драйвера для UNIX и криптографическую защиту. В настоящий момент работает в Sentry Data Systems. Крис также сделал вклад во множество свободных проектов, таких как Gentoo Linux и Clojure, стал соавтором книги The Joy of Clojure.

Aron Griffis

Эйрон Гриффис живет на территории Бостона, где провел последнее десятилетие работая в Hewlett-Packard над такими проектами, как сетевые UNIX-драйвера для Tru64, сертификация безопасности Linux, Xen и KVM виртуализация, и самое последнее — платформа HP ePrint. В свободное от программирования время Эйрон предпочитает размыщлять над проблемами программирования катаясь на своем велосипеде, жонглируя битами, или болея за бостонскую профессиональную бейсбольную команду «Красные Носки».

Источник

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