Что такое jobs линукс

Администрирование систем Linux. Фоновые задачи

Глава 3. Фоновые задачи

3.1. Фоновые процессы

3.1.1. Команда jobs

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

Данная команда jobs будет использоваться несколько раз на протяжении данной главы.

3.1.2. Сочетание клавиш Control-Z

Исполнение некоторых процессов может быть остановлено с помощью комбинации клавиш Ctrl-Z . Данная комбинация клавиш позволяет отправить сигнал SIGSTOP ядру Linux , что приведет к остановке исполнения процесса.

В том случае, если данная комбинация клавиш используется при работе с текстовым редактором vi(m) , процесс текстового редактора vi(m) продолжает исполняться в фоновом режиме. Процесс vi(m) , исполняющийся в фоновом режиме, может быть обнаружен в выводе команды jobs .

Процессы, которые запускаются в фоновом режиме благодаря символу & , размещенному в конце строки команды, также отображаются в выводе команды jobs .

3.1.4. Команда jobs -p

Команда jobs поддерживает интересный параметр -p , предназначенный для вывода идентификаторов процессов, исполняющихся в фоновом режиме.

Вызов команды fg позволяет перевести процесс из фонового режима в текущую командную оболочку. Номер фоновой задачи для переноса в текущую командную оболочку является параметром команды fg .

Задачи из фонового режима, исполнение которых было приостановлено , могут быть снова запущены в фоновом режиме с помощью команды bg . Команда bg осуществляет отправку сигнала SIGCONT соответствующему процессу.

Ниже приведен пример запуска процесса sleep в фоновом режиме (исполнение которого было остановлено с помощью сочетания клавиш Ctrl-Z ) с последующей повторной активацией этого процесса в фоновом режиме с помощью команды bg .

3.2. Практическое задание: фоновые процессы

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

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

3. Используйте команду jobs , чтобы убедиться в том, что исполнение процесса vi в фоновом режиме остановлено.

4. Выполните команду find / > allfiles.txt 2>/dev/null в фоновом режиме. Остановите исполнение этой команды в фоновом режиме перед тем, как будет закончен обход файловой системы.

5. Запустите два процесса sleep с длительным периодом ожидания в фоновом режиме.

6. Выведите информацию обо всех задачах , исполняющихся в фоновом режиме.

7. Используйте утилиту kill для остановки исполнения одного из процессов с именем sleep .

8. Инициируйте продолжение исполнения процесса find в фоновом режиме (убедитесь в том, что исполнение продолжилось).

9. Переведите один из процессов с именем sleep назад в текущую командную оболочку.

10. (Общий вопрос, ответ может быть дан при наличии свободного времени. ) Дайте детальные пояснения по поводу источников чисел из следующего примера. В каких условиях переменные заменяются на их значения? Какая командная оболочка осуществляет эту замену?

3.3. Корректная процедура выполнения практического задания: фоновые процессы

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

jobs (возможно одни из процессов cat все еще исполняется?)

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

(в процессе работы с vi нажмите ctrl-z)

3. Используйте команду jobs , чтобы убедиться в том, что исполнение процесса vi в фоновом режиме остановлено.

4. Выполните команду find / > allfiles.txt 2>/dev/null в фоновом режиме. Остановите исполнение этой команды в фоновом режиме перед тем, как будет закончен обход файловой системы.

5. Запустите два процесса sleep с длительным периодом ожидания в фоновом режиме.

6. Выведите информацию обо всех задачах , исполняющихся в фоновом режиме.

7. Используйте утилиту kill для остановки исполнения одного из процессов с именем sleep .

8. Инициируйте продолжение исполнения процесса find в фоновом режиме (убедитесь в том, что исполнение продолжилось).

bg 2 (проверьте состояние задачи с указанным идентификатором в списке фоновых задач)

9. Переведите один из процессов с именем sleep назад в текущую командную оболочку.

fg 3 (и снова проверьте состояние задачи с указанным идентификатором в списке фоновых задач)

10. (Общий вопрос, ответ может быть дан при наличии свободного времени. ) Дайте детальные пояснения по поводу источников чисел из следующего примера. В каких условиях переменные заменяются на их значения? Какая командная оболочка осуществляет эту замену?

Текущая командная оболочка bash будет заменять имена переменных $$ и $PPID при разборе строки команды перед исполнением команды echo.

Читайте также:  Нет звука при включении mac os

Теперь имена переменных экранированы с помощью двойных кавычек, но текущая командная оболочка bash все также будет заменять имена переменных $$ и $PPID при разборе строки команды перед исполнением команды bash -c.

А теперь имена переменных экранированы с помощью одинарных кавычек. Текущая командная оболочка bash не будет заменять имена переменных $$ и $PPID. Команда bash -c будет выполнена перед заменой имен переменных на их значения. Вторая же командная оболочка bash будет осуществлять замену имен переменных $$ и $PPID на их значения.

При использовании обратных кавычек командная оболочка все также будет осуществлять замену имен переменных на их значения перед исполнением встроенной команды echo. Результатом исполнения этой команды echo будут являться идентификаторы двух процессов. Эти идентификаторы будут переданы команде bash -c. Но эти два числа не являются корректными командами!

Источник

Команды jobs, fg, bg

Запущенный процесс в обычном режиме работает в режиме «foreground», т.е. — «на переднем плане», другими словами — «в приоритетном режиме». В таком режиме он принимает команды с управляющего терминала, в котором он запущен, и на него же выводит информацию stdout и stderr . Кроме того, он делает недоступным командную строку. Чтобы запустить задачу в фоновом режиме — в конце команды необходимо добавить знак амперсанда & .

Запуск фоновых заданий

Запустим три фоновых задания (сжимаем поток нулей и отправляем результат в /dev/null ):

Три задания, с номерами 1, 2, 3 и PID-ами 3380, 3381, 3382.

Управление фоновыми заданиями

Команды jobs , bg (background) и fg (foreground) позволяют управлять заданиями, выполняющимися на переднем и заднем планах:

  • jobs выводит список фоновых процессов
  • fg номер переводит процесс на передний план
  • bg номер переводит процесс на задний план

Посмотрим список фоновых процессов:

Знак «плюс» означает «текущее», т.е. то, с которым мы работаем сейчас. Знак «минус» означает «предыдущее». Если мы завершим текущее — то предыдущее станет текущим. Команды fg и bg без номера задания будут работать с текущим.

Переведем третье задание (текущее) на передний план:

Теперь терминал ожидает окончания выполнения задания. Поскольку задание у нас бесконечное — терминал будет занят бесконечно. Приостановим эту задачу с помощью Ctrl+Z :

Теперь, чтобы продолжить её выполнение в фоновом режиме:

Чтобы завершить фоновое задание, надо переместить его на передний план, а потом завершить с помощью Ctrl+C :

Источник

Управление процессами в linux. Команды top, ps, kill, jobs, fg

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

Процесс

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

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

Если мы хотим получить снимок того, что в данный момент происходит в системе, нужно использовать программу top.

Давайте разберемся с данной командой

  • Строка 2 Задачи . Обычно в вашей системе в одно и то же время работает довольно много процессов. Большинство из них будут системными процессами.

Другая программа для просмотра процессов называется ps, которая обозначает процессы. При обычном использовании онf покажет вам только процессы, запущенные в вашем текущем терминале. Если мы добавим аргумент aux, он покажет полный системный вид, что немного более полезно.

Это дает довольно мало информации, поэтому люди обычно направляют ее в grep. В итоге, фильтруются только те данные, которые нужны.

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

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

Это номер рядом с владельцем процесса, который является ID процесса.

Мы будем использовать это, чтобы определить, какой процесс отменить. Для этого мы используем программу, которая соответственно называется kill .

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

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

Блокировка рабочего стола

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

Большую часть времени мы видим только консоль которая является графическим интерфейсом, но мы можем легко добраться до остальных. Если GUI заблокирован, можно добраться до другой консоли и оттуда отменить процесс, вызывающий нарушение. Для переключения между консолями вы используете последовательность клавиш CTRL + ALT + F .

Таким образом, CTRL + ALT F2 приведет вас к консоли, где вы можете запускать команды, как указано выше, чтобы идентифицировать процессы и отменить их.

Затем CTRL + ALT F7 вернет вас в графический интерфейс, чтобы увидеть, было ли это исправлено. Общий подход заключается в том, чтобы сохранить процессы отмены, пока не будет устранена блокировка.

Читайте также:  Защитник windows оффлайн обновления

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

Фоновый режим

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

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

Если вы запустите приведенный выше пример самостоятельно, вы заметите, что терминал ждет 5 секунд, прежде чем снова вывести приглашение. Теперь, если мы запустим ту же команду, но вместо этого добавим амперсанд (&) в конце команды, мы сообщим терминалу запустить этот процесс в фоновом режиме.

На этот раз вы заметите, что он присваивает процессу номер задания. Кроме того, сообщает нам номер и сразу же возвращает нам подсказку. Мы можем продолжать работать, пока процесс работает в фоновом режиме. Если вы подождете 5 секунд, а затем нажмете ENTER, появится сообщение о том, что задание выполнено.

Мы также можем перемещать задания между передним и задним планами. Если вы нажмете CTRL + z, то текущий процесс переднего плана будет приостановлен и перемещен в фон. Затем мы можем использовать программу под названием fg.

Вывод

Мы познакомились со следующими командами Linux

top — просмотр в режиме реального времени данных о процессах, запущенных в системе.

ps — получить список процессов, запущенных в системе.

kill — завершить запуск процесса.

jobs — показать список текущих заданий, работающих в фоновом режиме.

fg — переместить фоновый процесс на передний план.

Источник

Основы 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):

Читайте также:  Machine debug manager как отключить windows 10

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

SIGTERM и SIGINT

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

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

Процесс может игнорировать оба сигнала, 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. В свободное от программирования время Эйрон предпочитает размыщлять над проблемами программирования катаясь на своем велосипеде, жонглируя битами, или болея за бостонскую профессиональную бейсбольную команду «Красные Носки».

Источник

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