Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

14 - Процессы, задачи. Команды fg, bg, jobs, top, nohup

Лекция



Сразу хочу сказать, что здесь никакой воды про процессы linux, и только нужная информация. Для того чтобы лучше понимать что такое процессы linux, задачи linux, fg, bg, jobs, top, htop, nohup , настоятельно рекомендую прочитать все из категории Операционная система LINUX.

В этой лекции мы закончим тему процессов и сигналов в Linux и перейдем к теме монтирования файловых систем. На прошлой лекции мы неоднократно использовали знак & (амперсанд) в конце команды (sleep 100 &). Знак амперсанда в конце команды означает, что запускаемый процесс нужно будет перевести в фоновый режим.Если запустить команду sleep 100 без знака &, то мы не получим приглашение в командной строке пока не будет завершен процесс sleep.

В контексте Linux, термины "процессы" и "задачи" обозначают разные вещи, хотя они тесно связаны и часто используются взаимозаменяемо. Давайте разберемся в разнице:

  1. Процессы (Processes): В операционной системе Linux процесс представляет собой выполняющуюся программу или задачу. Когда вы запускаете программу, она становится процессом в системе. Каждый процесс имеет свой уникальный идентификатор (PID - Process ID), статус (запущен, приостановлен, завершен и т.д.) и может взаимодействовать с другими процессами и системой. Процессы могут быть запущены как в фоновом режиме (демоны), так и в интерактивном режиме (пользовательские программы).

  2. Задачи (Tasks): Задача (или job) - это работа или команда, которую вы отправляете для выполнения в командной строке Linux. Когда вы вводите команду в терминале, она становится задачей. Возможно, эта задача будет создавать один или несколько процессов для своего выполнения. Задачи могут выполняться синхронно (последовательно) или асинхронно (параллельно), в зависимости от типа команды и настроек.

Например, когда вы запускаете текстовый редактор из командной строки, процесс редактора становится активным процессом, а запускаемая команда - задачей.

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

Если вы хотите просмотреть список активных процессов в Linux, вы можете использовать команду ps. А для запуска задачи в фоновом режиме или управления ими, можно использовать команды &, bg, fg и другие утилиты командной строки.

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

1
2
3
$ jobs
+ Stopped top
- Running sleep 100 &

Наберите в консоли команду top. Эта команда показывает в реальном времени существующие процессы, но не все, а только ту часть которая помещается на экране. Чуть позже мы вернемся к этой команде. Пока вы можете заметить, что top не возвращает управление командному интерпретатору. Можно либо выйти из программы (нажав q) или остановить процесс комбинацией клавиш ctrl+z (не путайте комбинации ctrl+c - завершение процесса и ctrl+z - остановка процесса). Остановленный процесс top мы и видели на примере выше. Для того, чтобы возобновить работу данного процесса (задачи) есть две команды: fg и bg, сокращения от английских слов foreground (передний план) и background (задний план). Синтаксис простой: fg номер задачи. Команда fg, работает не только с остановленными задачами, но и с задачами вообще. В нашем примере команда fg 2 выведет процесс sleep на передний план и приглашение командного интерпретатора станет недоступным (так как будто мы запустили команду sleep без символа &). Об этом говорит сайт https://intellect.icu . Команда fg 2 возобновит работу процесса top и выведет его на передний план. Команда fg без параметра возобновит работу последнего процесса остановленного комбинациейctrl+z, а если таковых не окажется, то выведет на передний план последнюю задачу (задачу с большим порядковым номером). Задача, которая будет восстановлена (отображена) командой fg без параметра отмечена знаком + в выводе результатов команды jobs. Команда bg предназначена для восстановления работыостановленных процессов (задач) в фоновом режиме.

14 - Процессы, задачи. Команды fg, bg, jobs, top, nohup

Отметьте для себя также, что задачи имеют свою нумерацию для каждого терминала (консоли). Если вы зарегистрируетесь в другой консоли и запустите в фоновом режиме процесс, то номер задачи будет начинаться с единицы. Также вы не найдете справки по командам fg и bg (man fg, man bg). Потому, что эти команды являются частью bash. И упоминание о них вы найдете в man bash.

Любые процессы запущенные из командного интерпретатора являются дочерними для него. И PPID таких процессов будет равен PID соответствующего командного интерпретатора. Если выйти из командного интерпретатора, то все процессы запущенные из него (в том числе и находящиеся в фоновом режиме) будут завершены. Зарегистрируйтесь в двух консолях и запустите во второй несколько процессов, перейдите в первую и выполните команду ps al:

1
2
3
4
5
6
7
8
9
$ ps al
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
0 1000 11180 1053 20 0 6292 3552 wait Ss pts/0 0:00 bash
0 1000 16442 1054 20 0 6292 3560 wait Ss pts/1 0:00 bash
0 1000 16460 16442 20 0 2952 628 signal T pts/1 0:00 sleep 200
0 1000 16461 16442 20 0 18416 4392 signal T pts/1 0:00 mocp
0 1000 16469 16442 20 0 2952 628 hrtime S pts/1 0:00 sleep 1000
0 1000 16470 16442 20 0 2468 1208 poll_s S+ pts/1 0:00 top
0 1000 16473 13180 20 0 2424 828 - R+ pts/0 0:00 ps al

В примере у нас запущено два командных интерпретатора bash с PID равными 13180 и 16442. Далее идут 4-е процесса, которые были запущены из второго командного интерпретатора - их можно определить по PPIDравному 16442. Теперь выйдите (команда exit) из второго интерпретатора и снова выполните команду ps al в первом интерпретаторе:

1
2
3
4
$ ps al
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
0 1000 13180 1053 20 0 6292 3556 wait Ss pts/0 0:00 bash
0 1000 16679 13180 20 0 2424 824 - R+ pts/0 0:00 ps al

Как видим завершился не только процесс с PID 16442, но и все процессы потомки (PPID 16442). Еще одно подтверждение того, что процесс-потомок не может существовать без родительского процесса.

Но, что делать если необходимо запустить процесс, и выйти из консоли так чтобы процесс продолжал работать в системе? Выход один - передать процесс-потомок другому процессу, который будет для него родительским. Такая возможность реализована в команде nohup. Данная команда позволяет запускать процессы, который будут оторваны от терминала если, терминал будет закрыт. Проводим эксперимент. Запускаем любую команду (например ping) через nohup в одной консоли и не выходя из нее смотрим на процессы:

1
$ nohup ping 127.0.0.1 &
1
2
3
4
5
6
$ ps alx
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
4 0 17326 1 20 0 7908 3208 wait Ss tty2 0:00 /bin/login --
4 1000 17427 17326 20 0 6304 3560 wait S tty2 0:00 -bash
4 1000 17450 17427 20 0 1848 556 wait_f S tty2 0:00 ping 127.0.0.1
0 1000 17517 13180 20 0 2424 848 - R+ pts/0 0:00 ps alx

Видим, что сейчас процесс ping имеют PPID равный 17427 (то есть это потомок командного интерпретатора bash) и PID 17450. Теперь выйдем из командного интерпретатора bash с PID 17427 и снова посмотрим на процессы:

1
2
3
$ ps alx
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
4 1000 17450 1 20 0 1848 556 poll_s S ? 0:00 ping 127.0.0.1

Как видим несмотря на то, что мы вышли из командного интерпретатора, процесс с PID 17450 остался в системе и принял в качестве родительского, процесс с PID равным 1, то есть процесс init. Процесс 17450 будет существовать до тех пор пока будет существовать процесс init, или пока мы сами не завершим его работу с помощью команды kill.

Команда ps показывает очень подробную информацию о процессах, но она почти бесполезна если нужно отследить работу процесса в реальном времени, просмотреть какие ресурсы и в каком количестве занимает процесс. Для этого существует другая команда - top. Команда top работает в интерактивном режиме и в режиме реального времени отображает работу процессов. Чтобы запустить нужно просто набрать команду - top. Выход - клавиша q. Процессы отображены не все, а только верхняя часть таблицы процессов отсортированная по какому-либо критерию (столбцу). Информацию которую выводит команда top можно условно разбить на две части: верхнюю с общей информацией о системе и ресурсах, и нижнюю таблицу процессов. В верхней части можно увидеть информацию о том сколько дней работает система, сколько занято оперативной памяти, сколько запущено процессов и другая информация:

1
2
3
4
5
top - 17:09:05 up 2 days, 1:48, 6 users, load average: 0.08, 0.05, 0.04
Tasks: 189 total, 1 running, 188 sleeping, 0 stopped, 0 zombie
Cpu(s): 4.7%us, 1.5%sy, 0.0%ni, 93.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1024111k total, 785111k used, 238111k free, 16372k buffers
Swap: 1140222k total, 287012k used, 853222k free, 365333k cached

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

Вау!! 😲 Ты еще не читал? Это зря!

Пожалуйста, пиши комментарии, если ты обнаружил что-то неправильное или если ты желаешь поделиться дополнительной информацией про процессы linux Надеюсь, что теперь ты понял что такое процессы linux, задачи linux, fg, bg, jobs, top, htop, nohup и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Операционная система LINUX

создано: 2014-09-13
обновлено: 2023-08-08
132540



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей



Комментарии


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

Операционная система LINUX

Термины: Операционная система LINUX