Как перевести программу в фоновый режим linux

Думаю, что ни для кого не секрет, что с помощью командной строки Linux можно решить любые задачи, в том числе и те, решение которых совсем нетривиально, а порой и невозможно без дополнительного ПО в Windows. В последнее время все больше людей переходят на Linux/Mac системы, при этом в большинстве своем даже не представляют той мощи, которую дает командная строка. Windows даже с PowerShell курит в сторонке.

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

Linux, Mac OS, BSD — многозадачные операционные системы. Это распространяется не только на демонов, но и на наши приложения. Например в одной сессии можно поставить что-нибудь на копирование, параллельно продолжая заниматься своими делами, при этом получая в CLI возможные возникающие ошибки.

Управление фоновыми задиниями осуществляется с помощью команд fg, bg, jobs, nohup и disown.

Для того, чтобы запустить приложение сразу в фоновом режиме, добавим в конце строки sleep

После того, как мы нажмем Enter, нам вернется строка формата [job_id] pid.

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

Если мы терминируем программу до окончания ее выполнения, это отобразиться так:

Убить фоновое задание можно с помощью kill, в качестве аргумента используя либо pid, либо номер задания:

Команда fg вытащит задание из фона.

>top >fg

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

Для этого воспользуемся сочетанием клавиш Ctrl+Z. После нажатия выполнение программы приостановится и она поместится в фон, о чем сообщит выдав соответствующее уведомление.

Нам останется продолжить ее выполнение с помощью команды bg:

Теперь задание запущено в фоновом режиме.

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

>nohup sleep

После запуска мы увидим сообщение, что стандартный вывод перенаправлен в файл $HOME/nohup.out. Теперь смело можем закрывать терминал.

Как перевести программу в фоновый режим linux

Все новые задания запускаются в активном режиме, если Вы ничего не указываете специально. Чтобы запустить задание в фоновом режиме, необходимо завершать командную строку символом (` [Enter] [1] 6575 $

Оболочка сообщит Вам номер задания ( в данном случае 1) и идентификатор процесса (в данном случае 6575), а эатем появится приглашение оболочки. когда фоновое задание завершится, оболочка выведет на экран номер задания, запустившую его команду и слово `Done’, указывающее на успешное завершение задания:

[1]+ Done programma

Чтобы перевести в фоновый режим активное задание, сначала остановите его, а затем переведите в фоновый режим командой bg («background» — фоновый режим). Например, для программы programma выполните:

$ programma [Enter] C-z [1]+ Stopped programma $ bg [RET] [1]+ programma https://www.opennet.ru/docs/RUS/linux_base/node127.html» target=»_blank»]www.opennet.ru[/mask_link]

Как перевести программу в фоновый режим linux

LuckyAds поставлен 29.08.2022 —>

Наши партнеры

Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

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

Любая выполняемая программа называется процессом. Всё от X Winow системы, до системных программ (демонов), которые запускаются при включении компьютера, является процессом. Каждый процесс запускается от имени какого-то пользователя. Процессы, которые стартовали при загрузке обычно выполняются от имени root пользователя, или от имени пользователя nobody.

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

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

5.4.1 Перевод в фоновый режим

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

Читайте также:
Триколор какие программы бесплатные

Первый способ перевода программы в фоновый режим, это добавление символа

LPIC 103.6 Приоритеты процессов в Linux

nohup — запускаем процессы в фоновом режиме | UnixHost

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

Другой способ перевода программы в фоновый режим, позволяет проделать это уже во время выполнения программы. Вначале запустите программу. Нажмите control+z. Это приостановит процесс. Что-то вроде паузы.

Программа моментально прекратит выполняться, но может в любой момент быть продолжена. Как только вы приостановили процесс, вы возвращаетесь к приглашению командной строки. Для перевода процесса в фоновый режим, наберите:

$ bg

И таким образом, приостановленный процесс перейдёт в фоновый режим.

5.4.2 Вывод из фонового режима

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

$ fg

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

[1]+ Done /bin/ls $LS_OPTIONS

Это говорит вам что фоновый процесс (в данном случае ls — не очень интересно), завершился.

Возможно так же одновременно выполнять несколько процессов в фоновом режиме. Если это так, вам надо знать, какой из процессов вы хотите вернуть на передний план. Простое выполнение fg вернёт процесс, который последним был переведён в фоновый режим. А что если у вас целый список процессов в фоновом режиме? К счастью, bash имеет команду для перечисления всех процессов. Она называется jobs и её вывод выглядит примерно так:

$ jpbs
[1] Stopped vim
[2]- Stopped amp
[3]+ Stopped man ps

Это выдаст вам список всех фоновых процессов. Как видите, все они остановлены. А ещё точнее, приостановлены. Номера это что-то вроде ID для всех фоновых процессов. Если возле номера отображается знак плюс (man ps), это означает, что этот процесс будет выведен из фонового режима по команде fg без указания аргументов.

Если же вы захотите перевести на передний план vim, вам придётся напечатать:

$ fg 1

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

5.4.3 ps

Итак, вы знаете, как переключаться между запущенными вами из командной строки фоновыми процессами. Так же вы знаете, что есть ещё много других процессов, которые всё время выполняются. Как же посмотреть их список? Вам надо воспользоваться ps(1) командой. У неё есть множество различных опций, здесь будут описаны лишь самые основные.

Для подробной информации смотрите man страницу для ps. Man страницы описаны в разделе 2.2.1.

Простой набор ps выдаст список программ, выполняемых на терминале. Довольно часто этот список будет невелик:

$ ps
PID TTY TIME CMD
7923 ttyp0 00:00:00 bash
8059 ttyp0 00:00:00 ps

Не смотря на то, что процессов немного, информация довольно типичная. Сколько бы у вас не было процессов, при простом использовании ps столбцы будут теми же. Что же означает вся эта информация?

Итак, по порядку: PID это идентификационный номер (ID) процесса. Каждый выполняющийся процесс получает уникальный идентификатор. В 2.2.х ядрах ID процессов может быть любым числом от 1 и до 32767. Каждому процессу присваивается следующий свободный PID. Когда процесс завершается, его номер освобождается.

Когда достигнут максимальный PID, следующий свободный будет взят из наименьшего освобождённого. Скорее всего, это изменится в ядре 2.4, и будут представлены новые 32-х битовые PID.

TTY столбец показывает, на каком терминале процесс выполняется. Простое выполнение ps покажет процессы выполняемые на текущем терминале, так что для всех процессов будет выведена идентичная информация в TTY столбце. Как видно из примера, оба показанных процесса выполняются на терминале ttyp0. Это говорит нам о том, что эти процессы запущены либо удалённо, либо из какого-то X терминала.

Читайте также:
Открыть bin на Андроид программа

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

Так вот, информация указанная в столбце TIME, показывает время, которое гораздо меньше фактического времени выполнения процесса. Если вы это время больше, чем несколько минут у одного из процессов, то скорее всего, что-то не так.

Ну и наконец, CMD столбец, показывает что же это за программа. Отображается только имя программы; опции командной строки и аналогичная информация не выводится. Для того чтобы увидеть эту информацию, вам необходимо воспользоваться одной из многих опций программы ps. Давайте обсудим некоторые из них вкратце.

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

$ ps -ax
PID TTY STAT TIME COMMAND
1 ? S 0:03 init [3]
2 ? SW 0:13 [kflushd]
3 ? SW 0:14 [kupdate]
4 ? SW 0:00 [kpiod]
5 ? SW 0:17 [kswapd]
11 ? S 0:00 /sbin/kerneld
30 ? SW 0:01 [cardmgr]
50 ? S 0:00 /sbin/rpc.portmap
54 ? S 0:00 /usr/sbin/syslogd
57 ? S 0:00 /usr/sbin/klogd -c 3
59 ? S 0:00 /usr/sbin/inetd
61 ? S 0:04 /usr/local/sbin/sshd
63 ? S 0:00 /usr/sbin/rpc.mountd
65 ? S 0:00 /usr/sbin/rpc.nfsd
67 ? S 0:00 /usr/sbin/crond -l10
69 ? S 0:00 /usr/sbin/atd -b 15 -l 1
77 ? S 0:00 /usr/sbin/apmd
79 ? S 0:01 gpm -m /dev/mouse -t ps2
94 ? S 0:00 /usr/sbin/automount /auto file /etc/auto.misc
106 tty1 S 0:08 -bash
108 tty3 SW 0:00 [agetty]
109 tty4 SW 0:00 [agetty]
110 tty5 SW 0:00 [agetty]
111 tty6 SW 0:00 [agetty]
(output cut)

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

Наверное вам сразу бросится в глаза, что большинство из процессов выполняются на tty »?». Это процессы, запущенные с более не активного терминала. И поэтому они больше не принадлежат определённому терминалу.

Так же вы видите новый столбец: STAT. Он показывает состояние (status) процесса. S используется для спящего (sleeping) процесса: процесс ожидает, пока что-то произойдёт. Z используется для зомбиованных процессов (zombied). Это такие процессы, родительский процесс которых умер, оставив дочерние процессы рабочими.

Это не есть хорошо.

Если вы хотите увидеть ещё больше информации о выполняемых процессах, попробуйте такую команду:

$ ps -aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 344 80 ? S Mar02 0:03 init [3]
root 2 0.0 0.0 0 0 ? SW Mar02 0:13 [kflushd]
root 3 0.0 0.0 0 0 ? SW Mar02 0:14 [kupdate]
root 4 0.0 0.0 0 0 ? SW Mar02 0:00 [kpiod]
root 5 0.0 0.0 0 0 ? SW Mar02 0:17 [kswapd]
root 11 0.0 0.0 1044 44 ? S Mar02 0:00 /sbin/kerneld
root 30 0.0 0.0 1160 0 ? SW Mar02 0:01 [cardmgr]
bin 50 0.0 0.0 1076 120 ? S Mar02 0:00 /sbin/rpc.port
root 54 0.0 0.1 1360 192 ? S Mar02 0:00 /usr/sbin/sysl
root 57 0.0 0.1 1276 152 ? S Mar02 0:00 /usr/sbin/klog
root 59 0.0 0.0 1332 60 ? S Mar02 0:00 /usr/sbin/inet
root 61 0.0 0.2 1540 312 ? S Mar02 0:04 /usr/local/sbi
root 63 0.0 0.0 1796 72 ? S Mar02 0:00 /usr/sbin/rpc.
root 65 0.0 0.0 1812 68 ? S Mar02 0:00 /usr/sbin/rpc.
root 67 0.0 0.2 1172 260 ? S Mar02 0:00 /usr/sbin/cron
root 77 0.0 0.2 1048 316 ? S Mar02 0:00 /usr/sbin/apmd
root 79 0.0 0.1 1100 152 ? S Mar02 0:01 gpm
root 94 0.0 0.2 1396 280 ? S Mar02 0:00 /usr/sbin/auto
chris 106 0.0 0.5 1820 680 tty1 S Mar02 0:08 -bash
root 108 0.0 0.0 1048 0 tty3 SW Mar02 0:00 [agetty]
root 109 0.0 0.0 1048 0 tty4 SW Mar02 0:00 [agetty]
root 110 0.0 0.0 1048 0 tty5 SW Mar02 0:00 [agetty]
root 111 0.0 0.0 1048 0 tty6 SW Mar02 0:00 [agetty]
(output cut)
Читайте также:
Программа камеры на дорогах для Андроид которая показывает

Это достаточно полный набор информации. Здесь вы видите новые столбцы, которые описывают: какой пользователь запустил процесс, сколько системных ресурсов использует процесс (%CPU, %MEM, VSZ и RSS столбцы), и дату, когда процесс был запущен. Очевидно, здесь предоставлено достаточно информации о процессах, которая может быть полезна для системного администратора. Так же мы встретились с ещё одной проблемой: информация не помещается на экране. Опция »-w» исправит это.

Вывод команды не очень красив, но весьма полезен работает. И всё же мы ещё не увидели всей доступной информации по выполняемым процессам. Есть ещё много разнообразной информации, которую вы можете получить о каждом из процессов. Загляните в man страницу для программы ps. Тем не менее, опции описанные в этом разделе являются наиболее часто применяемыми.

И наверное вы будете пользоваться в основном ими.

5.4.4 kill

Иногда что-то не так происходит с программами и возникает необходимость восстановить порядок в системе. Программа, предоставляющая такой вид услуг, называется kill(1). Она может быть использована для манипулирования процессами несколькими разными способами. Наиболее часто программа применяется, чтобы убивать процессы. У вас появится необходимость в этом, если программа вышла из под контроля и забирает много системных ресурсов, или если вам просто не нравится, что эта программа осталась в памяти.

Для того, чтобы убить процесс, вам надо знать либо его PID, либо имя. Чтобы получить PID воспользуйтесь программой ps, как это обсуждалось в предыдущем разделе. Например, чтобы убить процесс 4747, вы зададите такую команду:

$ kill 4747

Для того, чтобы убить процесс, вам надо быть его хозяином. Это сделано в целях безопасности. Если бы вы могли убивать процессы других пользователей, открылась бы возможность произведения множества злонамеренных вещей в системе. Разумеется, root может убить любой процесс в системе.

Есть так же другая разновидность программы kill, которая называется killall(1). Функция программы соответствует её названию. Она убивает все из запущенных программ, с указанным именем. Если вы хотите убить все выполняемые vim процессы, вам следует воспользоваться такой командой:

$ killall vim

Все vim процессы, выполняемые вами будут убиты. Если вы выполните команду, как root, то она убьёт вообще все vim процессы, выполняемые любым из пользователей. Это предоставляет интересный способ выбрасывания всех (включая и вас) из системы:

# killall bash

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

$ kill -9 4747

Практически наверняка, это заставит процесс 4747 умереть. Вы можете воспользоваться этим же ключом с killall программой. Этот ключ позволяет посылать различные сигналы программам. Обычный kill посылает процессу сигнал SIGTERM (terminate — завершиться). kill -9 посылает SIGKILL (kill — убить).

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

$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD
18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN
22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO
30) SIGPWR

Номера используются для kill, а имя без предшествующего »SIG» используется для killall. Вот ещё пример:

$ killall -KILL vim

5.4.5 top

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

$ top

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

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

Источник: rus-linux.net

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru