ping ya.ru
64 bytes from www.yandex.ru (93.158.134.3): icmp_seq=4 ttl=57 time=30.3 ms
64 bytes from www.yandex.ru (93.158.134.3): icmp_seq=5 ttl=57 time=29.0 ms
64 bytes from www.yandex.ru (93.158.134.3): icmp_seq=6 ttl=57 time=29.0 ms
64 bytes from www.yandex.ru (93.158.134.3): icmp_seq=7 ttl=57 time=29.6 ms При переводе на передний план вывод производится в основной терминал, более ничего не меняется и задание выполняется в любом случае Можно таким же образом вывести команду на задний план Вывод команды таким образом продолжит быть присоединенным к терминалу, результат tail -f снова выведется в консоль как только в лог будет записываться информация (сэмулировать ситуацию можно перезапустив какой-либо демон подключившись к системе через другой терминал). При выполнении в bg таким образом для нескольких команд их вывод в терминал будет смешиваться случайным образом, что может быть не очень удобно. Удалить процесс можно указывая его номер со знаком процента Работа с Linux jobs является типичной операцией поручному управлению системными процессами. Читайте подробнее про ps aux.
Управление процессами в Linux Перевести процесс в фоновый режим
Администрирование систем Linux. Фоновые задачи
Глава 3. Фоновые задачи
3.1. Фоновые процессы
Список задач, запущенных с помощью вашей текущей командной оболочки и выполняющихся в фоновом режиме, может быть выведен с помощью команды jobs . По умолчанию у вас не должно быть каких-либо задач, выполняющихся в фоновом режиме. Данная команда jobs будет использоваться несколько раз на протяжении данной главы. 3.1.2. Сочетание клавиш Control-Z Исполнение некоторых процессов может быть остановлено с помощью комбинации клавиш Ctrl-Z . Данная комбинация клавиш позволяет отправить сигнал SIGSTOP ядру Linux , что приведет к остановке исполнения процесса. В том случае, если данная комбинация клавиш используется при работе с текстовым редактором vi(m) , процесс текстового редактора vi(m) продолжает исполняться в фоновом режиме. Процесс vi(m) , исполняющийся в фоновом режиме, может быть обнаружен в выводе команды jobs . Процессы, которые запускаются в фоновом режиме благодаря символу allfiles.txt 2>/dev/null в фоновом режиме. Остановите исполнение этой команды в фоновом режиме перед тем, как будет закончен обход файловой системы. 5. Запустите два процесса sleep с длительным периодом ожидания в фоновом режиме.
6. Выведите информацию обо всех задачах , исполняющихся в фоновом режиме. 7. Используйте утилиту kill для остановки исполнения одного из процессов с именем sleep . 8. Инициируйте продолжение исполнения процесса find в фоновом режиме (убедитесь в том, что исполнение продолжилось). 9. Переведите один из процессов с именем sleep назад в текущую командную оболочку.
10. (Общий вопрос, ответ может быть дан при наличии свободного времени. ) Дайте детальные пояснения по поводу источников чисел из следующего примера. В каких условиях переменные заменяются на их значения? Какая командная оболочка осуществляет эту замену?
Горячие клавиши Ubuntu. Linux для начинающих
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.
Теперь имена переменных экранированы с помощью двойных кавычек, но текущая командная оболочка bash все также будет заменять имена переменных $$ и $PPID при разборе строки команды перед исполнением команды bash -c. А теперь имена переменных экранированы с помощью одинарных кавычек. Текущая командная оболочка bash не будет заменять имена переменных $$ и $PPID.
Команда bash -c будет выполнена перед заменой имен переменных на их значения. Вторая же командная оболочка bash будет осуществлять замену имен переменных $$ и $PPID на их значения. При использовании обратных кавычек командная оболочка все также будет осуществлять замену имен переменных на их значения перед исполнением встроенной команды echo.
Результатом исполнения этой команды echo будут являться идентификаторы двух процессов. Эти идентификаторы будут переданы команде bash -c. Но эти два числа не являются корректными командами! Источник
Linux: jobs, fg, bg — управление фоновыми процессами
Запущенный процесс в обычном режиме работает в режиме «foreground«, т.е. — «на переднем плане» или, другими словами, «в приоритетном режиме». В таком режиме он принимает команды с управляющего терминала, в котором он запущен, и на него же выводит информацию stdout и stderr . Кроме того, он делает недоступным командную строку.
Что бы запустить задачу в фоновом режиме — в конце команды необходимо добавить знак FreeBSD: команды kill, nohup — сигналы и управление процессами. После этого — она появится в списке jobs с новым номером: Теперь, что бы продолжить её выполнение в фоновом режиме — введите команду bg (background): Кроме обычных PID , у задач в фоне имеется собственный номер, который всегда начинается с единицы (если нет других фоновых задач). Кроме того, jobs отображает состояние процесса — Running, Stopped, Done, Exit . Например, по окончании архивирования — статус задачи станет Done : Если команду jobs запустить из каталога отличного от того, в котором была запущена сама задача — jobs укажет её wd — working directory. так же, необходимо учитывать, что для каждого управляющего терминала номера задач в jobs будут независимы и начинаться с единицы.
Что бы вывести задачу из фонового режима — используется команда fg (foreground), которой можно либо передать номер задачи в качестве аргумента, либо — запустить без аргументов. В последнем случае — будет выведена задача, отмеченная знаком + в списке jobs , т.е. — последняя отправленная «в фон» задача. Вернёт на экран утилиту top и переведёт её в режим Running . Источник
IgorKa — Информационный ресурс
Немного обо всем и все о немногом, или практический опыт системного администратора.
« Окт | Дек » | |||||
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 |
Лекция №14 — Процессы, задачи. Команды fg, bg, jobs, top, nohup
В этой лекции мы закончим тему процессов и сигналов в Linux и перейдем к теме монтирования файловых систем. На прошлой лекции мы неоднократно использовали знак ). Знак амперсанда в конце команды означает, что запускаемый процесс нужно будет перевести в фоновый режим.
Если запустить команду sleep 100 без знака ). Команда fg 2 возобновит работу процесса top и выведет его на передний план.
Команда fg без параметра возобновит работу последнего процесса остановленного комбинацией ctrl+z, а если таковых не окажется, то выведет на передний план последнюю задачу (задачу с большим порядковым номером). Задача, которая будет восстановлена (отображена) командой fg без параметра отмечена знаком + в выводе результатов команды jobs.
Команда bg предназначена для восстановления работы остановленных процессов (задач) в фоновом режиме. Отметьте для себя также, что задачи имеют свою нумерацию для каждого терминала (консоли). Если вы зарегистрируетесь в другой консоли и запустите в фоновом режиме процесс, то номер задачи будет начинаться с единицы.
Также вы не найдете справки по командам fg и bg (man fg, man bg). Потому, что эти команды являются частью bash. И упоминание о них вы найдете в man bash. Любые процессы запущенные из командного интерпретатора являются дочерними для него. И PPID таких процессов будет равен PID соответствующего командного интерпретатора.
Если выйти из командного интерпретатора, то все процессы запущенные из него (в том числе и находящиеся в фоновом режиме) будут завершены. Зарегистрируйтесь в двух консолях и запустите во второй несколько процессов, перейдите в первую и выполните команду ps al: В примере у нас запущено два командных интерпретатора bash с PID равными 13180 и 16442. Далее идут 4-е процесса, которые были запущены из второго командного интерпретатора — их можно определить по PPID равному 16442. Теперь выйдите (команда exit) из второго интерпретатора и снова выполните команду ps al в первом интерпретаторе: Как видим завершился не только процесс с PID 16442, но и все процессы потомки (PPID 16442). Еще одно подтверждение того, что процесс-потомок не может существовать без родительского процесса.
Но, что делать если необходимо запустить процесс, и выйти из консоли так чтобы процесс продолжал работать в системе? Выход один — передать процесс-потомок другому процессу, который будет для него родительским. Такая возможность реализована в команде nohup. Данная команда позволяет запускать процессы, который будут оторваны от терминала если, терминал будет закрыт.
Проводим эксперимент. Запускаем любую команду (например ping) через nohup в одной консоли и не выходя из нее смотрим на процессы: Видим, что сейчас процесс ping имеют PPID равный 17427 (то есть это потомок командного интерпретатора bash) и PID 17450.
Теперь выйдем из командного интерпретатора bash с PID 17427 и снова посмотрим на процессы: Как видим несмотря на то, что мы вышли из командного интерпретатора, процесс с PID 17450 остался в системе и принял в качестве родительского, процесс с PID равным 1, то есть процесс init. Процесс 17450 будет существовать до тех пор пока будет существовать процесс init, или пока мы сами не завершим его работу с помощью команды kill.
Команда ps показывает очень подробную информацию о процессах, но она почти бесполезна если нужно отследить работу процесса в реальном времени, просмотреть какие ресурсы и в каком количестве занимает процесс. Для этого существует другая команда — top. Команда top работает в интерактивном режиме и в режиме реального времени отображает работу процессов.
Чтобы запустить нужно просто набрать команду — top. Выход — клавиша q. Процессы отображены не все, а только верхняя часть таблицы процессов отсортированная по какому-либо критерию (столбцу). Информацию которую выводит команда top можно условно разбить на две части: верхнюю с общей информацией о системе и ресурсах, и нижнюю таблицу процессов.
В верхней части можно увидеть информацию о том сколько дней работает система, сколько занято оперативной памяти, сколько запущено процессов и другая информация: По умолчанию процессы отсортированы по уровню загрузки процессора. Если необходимо изменить порядок сортировки, нужно нажать комбинацию клавиш Shift+o или Shift+f.
После нажатия этой комбинации клавиш будет отображено окно в котором можно выбрать столбец по которому необходимо отсортировать таблицу. Например, чтобы отсортировать таблицу по объему занимаемой памяти нужно нажать комбинацию Shift+o, затем клавишу n и нажать Enter.
Чтобы изменить порядок сортировки (убывание/возрастание), необходимо нажимать комбинацию Shift+r. Чтобы получить краткую справку о программе top нужно нажать клавишу h. Чтобы отобразить процессы определенного пользователя необходимо в работающей программе top нажать клавишу u и затем набрать имя учетной записи и нажать Enter. Чтобы снова отобразить все процессы нажимаем u и ничего не набирая нажимаем Enter.
Очень удобно программу top использовать для удаления процессов которые загружают систему. Такие процессы (загружающие процессор на 100%) будут по умолчанию вверху таблицы. Смотрим PID процесса, нажимаем клавишу k, пишем PID и нажимаем Enter. Затем пишем номер сигнала 9 и еще раз Enter.
У команды top еще много возможностей, подробнее смотрите в справке. На этом будем заканчивать тему процессов и сигналов. Следующая лекция будет посвящена монтированию файловых систем. Источник
Источник: onecomp.ru
Как приостановить процесс в Linux
Иногда вам может понадобиться приостановить процесс в Linux. Это может быть вызвано различными причинами. Например, если у вас есть долго работающий процесс, который занимает много системных ресурсов, вам может понадобиться приостановить его, чтобы запустить другие процессы. Кроме того, если ваш долго работающий процесс зависит от выхода другого процесса, вам может понадобиться приостановить его, чтобы завершить выполнение некоторых зависимостей. В этой статье мы узнаем, как приостановить процесс в Linux.
Как приостановить процесс в Linux
Если вы запускаете процесс в терминале, самый простой способ приостановить или приостановить его — это нажать клавиши Ctrl+Z. Когда вы введете эту комбинацию клавиш, вы увидите сообщение о том, что процесс был остановлен, и отобразите его ID для дальнейшего использования. Вот пример скриншота.
Далее, если вы хотите запустить этот процесс в фоновом режиме, введите команду bg
Но что делать, если ваш процесс уже запущен в фоновом режиме? В таких случаях нужно сначала получить PID этого процесса и выдать команду Kill STOP, чтобы остановить процесс. Например, допустим, вы выполняете следующую команду.
wget https://downloads.joomla.org/cms/joomla4/4-2-6/Joomla_4-2-6-Stable-Full_Package.zip?format=zip https://g-soft.info/articles/8981/kak-priostanovit-protsess-v-linux/» target=»_blank»]g-soft.info[/mask_link]
Кунг-фу стиля Linux: организация работы программ после выхода из системы
Если вы пользуетесь Linux с ранних дней появления этой ОС (или если, вроде меня, начинали с Unix), то вам не надо очень быстро и в больших количествах изучать то новое, что появляется в системе по мере её развития и усложнения. Вы можете разбираться с новым постепенно, в режиме обычной работы. Но если вы только начинаете знакомство с Linux, то вам будет непросто сразу в ней разобраться, сразу понять её особенности. Среди тех, кому приходится изучать Linux с нуля, те, кто пользуется Raspberry Pi, те, кого расстроило то, что Microsoft забросила Windows XP, те, кто развернул облачную среду для своего IoT-проекта, похожего на Skynet.
Недавно сын спросил меня о том, как сделать так, чтобы что-то работало бы на Linux-компьютере даже тогда, когда осуществлён выход из системы. Я подумал, что это — хороший вопрос, и что на него, в зависимости от того, о чём именно идёт речь, может и не быть простого ответа.
Все переводы серии
Есть четыре ситуации, которые можно рассмотреть, отвечая на этот вопрос:
- Нужно запустить некую программу, выполнение которой, как заранее известно, займёт много времени.
- Была запущена некая программа, а потом стало понятно, что её выполнение займёт много времени. После этого решено было выйти из системы, не прерывая работу этой программы.
- Нужно написать скрипт или другую программу, которая может отключиться от терминала и работать сама по себе (такие программы называют демонами).
- Нужно, чтобы некая программа работала бы всё время, даже сразу после перезагрузки системы, когда в неё ещё не входили.
Я сосредоточусь на первых двух пунктах списка, но дам некоторые подсказки касательно двух других вариантов. Итак, программа, которая сама отключается от терминала, это — демон. Этот механизм можно создать самостоятельно, а можно и у кого-нибудь позаимствовать. Сделать так, чтобы программа выполнялась бы всё время, может быть сложно, а может быть и не очень сложно.
В большинстве Linux-дистрибутивов есть файл /etc/rc.local , который запускается с root-правами при запуске системы (как минимум — при нормальном запуске). Сюда можно добавлять команды для автозапуска каких-нибудь программ. Если же требуется, например, создавать собственные сервисы, то тут нужно учитывать особенности системы, знать о том, что именно в ней используется — SystemV, Upstart, OpenRC или Systemd. Возможно, придётся столкнуться и с чем-то другим. Но это — отдельная большая тема.
Обеспечение работы программ после выхода из системы
Вернёмся к первым двум пунктам нашего списка. Представьте, что вам надо запустить программу remote_backup , и вы знаете о том, что вы её запустите (возможно, войдя в систему по ssh), а потом отключитесь, но при этом она должна продолжать работать. Или вы, возможно, хотите обезопасить себя и сделать так, чтобы она продолжала бы работать даже в том случае, если вы случайно выйдете из системы. В любом случае, при обычном запуске программы из командной строки выход из системы означает остановку программы. Или не означает?
Для этого нужно просто запустить программу так, чтобы она не зависела бы от текущей сессии пользователя. Если вы используете bash и всё у вас настроено правильно, то сделать это можно очень просто. Если для запуска программы в фоновом режиме используется :
remote_backup /tmp/backupstatus.log tmp/backupstatus.log’ ~/huptest echo sleep 60 >>~/huptest echo ‘date >/tmp/test.txt’ >>~/huptest chmod +x ~/huptest ~/huptest
До тех пор, пока не истекут 60 секунд, нажмите клавишу клавиатуры, вводящую символ «тильда» ( ~ ). Затем нажмите клавишу, вводящую точку. В SSH тильда — это экранирующий символ (если он находится в начале строки). Воспользуйтесь командой ~? если хотите узнать подробности об этом.
Теперь сделайте небольшой перерыв, выпейте чего-нибудь, и вернитесь к компьютеру через несколько минут. Войдите в систему. Файла /tmp/test.txt вы не найдёте (если только он уже не был создан, но и в таком случае его содержимое позволит сделать правильные выводы). Это говорит нам о том, что завершение сессии остановило программу, ожидающую истечения 60 секунд для продолжения работы.
А теперь попробуйте такую конструкцию:
~/huptest
Но даже команда nohup не идеальна. Если программа, которую мы выполняем, сама перехватывает флаг nohup , то команда nohup нам не поможет. Правда, большинство программ не перехватывают этот флаг и nohup будет работать независимо от используемой оболочки и от её настроек.
Есть множество других способов достижения того же результата. Например, можете исследовать возможности команды at , которая запускает другие программы в заданное время (скажем — через секунду после текущего момента). При запуске программ будет использоваться sh, а не bash (без выполнения некоторых действий), но они будут работать в автономном режиме.
Отсутствие планирования
Правда, существует пара ситуаций, в которых nohup нам не поможет. Первая — это когда не планировалось запускать программу в фоновом режиме. Как быть, если что-то было запущено, а потом стало ясно, что операция будет выполняться достаточно долго? Что делать, если понадобилось срочно куда-то отойти? Может случиться и так, что нужно запустить программу, вручную ввести в неё какие-то данные, а потом перевести в фоновый режим.
Возможно, вы знаете о том, что работающую программу можно приостановить, воспользовавшись комбинацией клавиш CTRL + Z . Bash сообщит, что создано задание, и даст его номер. Потом, используя команду bg , можно перевести это задание в фоновый режим. Если, например, заданию присвоен номер 3 , то соответствующая команда будет выглядеть так:
bg %3
Если опция huponexit выключена, то больше ничего делать не надо. Но в общем случае нужно сообщить оболочке о том, что надо либо не отправлять заданию команды HUP , либо убрать его из таблицы заданий. Для решения обеих этих задач можно воспользоваться командой disown , встроенной в bash.
При использовании disown без опций будет осуществлено удаление именованного задания из таблицы заданий. Если вы не хотите заходить так далеко, воспользуйтесь опцией -h для того чтобы оболочка не передавала бы конкретному заданию сигнал HUP . Можно ещё воспользоваться опцией -a , позволяющей воздействовать на все задания, или опцией -r , которая позволяет обращаться ко всем работающим заданиям. Это — стандартная возможность bash (то есть — справку по ней можно найти в справке по bash), поэтому работать она будет не во всех командных оболочках. После того, как вы обработали фоновую задачу с помощью disown , вы можете спокойно выходить из системы.
Постоянные сессии
Как это обычно бывает в Linux, существует несколько способов решения одной и той же задачи. Для работы с сессиями можно воспользоваться screen или tmux. Работа с этими утилитами похожа на работу с VNC, когда можно выйти из системы, а потом, войдя в неё, обнаружить, что всё, с чем до этого работали, никуда не делось. Если вы решаете множество задач с использованием командной строки, то можете попробовать byobu (это даст вам приятный интерфейс для screen) или tmux.
Использование tmux
Если вы хотите это испытать — войдите в систему как обычно и запустите screen, tmux или byobu. Снова запустите тестовый скрипт (с https://habr.com/ru/companies/ruvds/articles/533336/» target=»_blank»]habr.com[/mask_link]