- Как запустить уже остановленную программу в фоне не переходя в foreground?
- Как мне запустить остановленную работу в Linux?
- Как начать приостановленный процесс?
- Как запустить фоновое задание Linux?
- Как приостановить процесс в Linux?
- Как перезапустить процесс Linux?
- Как отменить приостановку приложения?
- Почему приложения приостанавливаются в диспетчере задач?
- Как я могу отменить свою работу?
- Как мне запустить задание в Unix?
- Какие команды вы можете использовать для завершения запущенного процесса?
- Как запустить процесс в Linux?
- Как я могу возобновить остановленную работу в Linux?
Как запустить уже остановленную программу в фоне не переходя в foreground?
Запускаю:
1. ping www.google.com
2. Ctrl+Z останавливаем процесс и выходим из него
Процесс висит как Stopped
3. Прописываю bg для того что бы запустить остановленный процесс в фоне и не переходить в сам процесс.
И на 3 этапе меня перекидывает в сам процесс, где я вижу выполнение команды ping, при этом Ctrl+Z/Ctrl+C могут не сработать и надо нажать 10.
Получается что bg делает то же самое что и fg, но при этом будто зависает и не реагирует на остановку или прерывание
Как правильно запустить уже остановленную команду в фоне?
То что можно сразу запустить команду в фоне с помощью >/dev/null 2>&1 & я знаю, но интересно как это должно работать без него и должно ли.
Версия Linux Ubuntu 20.04.2
Простой 1 комментарий
Можно сделать disown, а потом exit, и процесс продолжит работать. Но недолго. Так как у него stdout стал недоступен, он быстро получит ошибку EPIPE при записи в консоль и умрёт.
Так что для корректной работы надо вывод куда-то перенаправить, что не умрёт при завершении сессии. Например, в /dev/null или в файл:
ping foo.bar > ping.log 2>&1 & disown
Что там происходит сейчас можно увидеть по команде tail -f ping.log
pfg21 Возобновляется пинг и меня перекидывает в процесс. Все то же самое, если я использую bg.
И так же Ctrl+Z/Ctrl+C не срабатывают и приходиться выходить через Ctrl+D
все правильно.
вывод bg работающей программы прикреплен к твоей консоли. отправляя ее в бекграунд ты видишь ее выхлоп.
но управление отключено от bg работающей программой (она ж в бекграунде) т.е. ctrl-c ей не посылается.
pfg21, я так понял kill -18 %pid%, это то же самое что fg %номер задачи?
Для чего же тогда использовать bg для процесса и как его прерывать?
gera7, нет. из bg процесс не выходит. сигналы вообще на такое не смотрят.
для того чтобы убить процесс используй сигнал SIGKILL
исторически бекграунд используется для того чтобы через одну консоль запускать несколько работающих процессов.
во времена создания этих команд подключение к серверу было только одно, физически одно — витая пара от терминала до сервера 🙂
bg fg рассчитаны на работы с консолью, с человеком.
сигнал управления может послать любой процесс на машине (с ограничениями по секурности)
>И на 3 этапе меня перекидывает в сам процесс, где я вижу выполнение команды ping, при этом Ctrl+Z/Ctrl+C могут не сработать
Это вывод процеса, сам процес продолжает работать в фоне и ты можеш запустить другой процес если хочешь.
Что бы не видет вывод ping — самое просто перенаправить вывод куда-нибудь.
Нужно понимать два момента
команды jobs, bg и fg являются внутренними командами шелла, и работают с дочерними процессами именно этого шелла.
Если вы приостановили дочерний процесс (Ctrl-Z) или запустили его сразу в бэкраунда (ping google.com &), то командой fg вы выводите его на передний план. Это все равно что в винде вы взяли и поставили мышкой фокус на окне блокнота, после чего нажимая клавиши вы будете писать в этом блокноте.
А если вы приостановили процесс Ctrl-Z и продолжили его через bg, он будет продолжаться в фоне, а на переднем плане будет ваш шелл — вы можете писать другие команды. Все равно что мышкой в винде вы кликнули в рабочий стол рядом с блокнотом, и поэтому нажимая клавиши вы будете писать не в блокноте а на рабочем столе (стрелки по иконкам бегают, какие-то хоткеи могут работать, Enter запустит текущую иконку)
Для понимания потренируйтесь так:
sleep 100 CTRL-Z jobs bg 1 echo I am still in shell fg 1 CTRL+C
И второй момент — можно запустить программу в фоне, и отсоединить ее от текущего шелла вообще (запустить ее через nohup sleep 100 & и отключитья от сессии, или выполнить
sleep 100 &
jobs
disown
jobs
ps aux | grep sleep
в этом случае bg/fg уже не помогут, так как программа запущенная в фоне уже имеет другого родителя, и не подконтрольна внутренним bg/fg — вернуть ее как дочерний процесс под текущий шелл уже не выйдет.
Поэтому Ctrl+C, Ctrl+Z — это просто сигнал который ты отправляешь в текущий «foreground» процесс, с которым ассоциирован stdin
Как мне запустить остановленную работу в Linux?
Вы можете легко использовать команду остановки или CTRL-z, чтобы приостановить задачу. А затем вы можете использовать fg позже, чтобы возобновить задачу с того места, где она была остановлена.
Как начать приостановленный процесс?
[Уловка] Приостановить / возобновить ЛЮБУЮ задачу в Windows.
- Откройте монитор ресурсов.
- Теперь на вкладке «Обзор» или «ЦП» найдите процесс, который нужно приостановить, в списке запущенных процессов.
- Как только процесс будет найден, щелкните его правой кнопкой мыши, выберите «Приостановить процесс» и подтвердите приостановку в следующем диалоговом окне.
Как запустить фоновое задание Linux?
Как запустить процесс или команду Linux в фоновом режиме. Если процесс уже выполняется, как, например, в приведенном ниже примере команды tar, просто нажмите Ctrl + Z, чтобы остановить его, затем введите команду bg, чтобы продолжить его выполнение в фоновом режиме в качестве задания. Вы можете просмотреть все фоновые задания, набрав задания.
Как приостановить процесс в Linux?
Сначала найдите pid запущенного процесса с помощью команды ps. Затем приостановите его, используя kill -STOP & lt; PID & gt;, а затем переведите систему в спящий режим. Возобновите работу своей системы и возобновите остановленный процесс с помощью команды kill -CONT & lt; PID & gt;.
Как перезапустить процесс Linux?
Чтобы перезапустить остановленный процесс, вы должны быть либо пользователем, запустившим процесс, либо иметь полномочия пользователя root. В выходных данных команды ps найдите процесс, который нужно перезапустить , и запишите его номер PID. В этом примере PID — 1234. Замените PID вашего процесса на 1234.
Как отменить приостановку приложения?
[Уловка] Приостановить / возобновить ЛЮБУЮ задачу в Windows. Откройте монитор ресурсов. Теперь на вкладке «Обзор» или «ЦП» найдите процесс, который нужно приостановить, в списке запущенных процессов. Как только процесс будет найден, щелкните его правой кнопкой мыши, выберите «Приостановить процесс» и подтвердите приостановку в следующем диалоговом окне.
Почему приложения приостанавливаются в диспетчере задач?
Современные приложения UWP (метро) приостановлены процессом svchost, который контролирует состояние питания приложений UWP. Это сделано для экономии системных ресурсов, таких как энергия и использование процессора. Кодировка приложений UWP позволяет это сделать, поэтому традиционные программы Win32 не переходят в приостановленное состояние.
Как я могу отменить свою работу?
Действительно хороший ярлык — [Ctrl + z], который останавливает текущее выполняемое задание, которое позже вы можете прервать или возобновить, либо на переднем плане, либо в фоновом режиме. Это можно использовать, нажав [CTRL + z] во время выполнения задания (задачи), это можно сделать с любым приложением, запущенным с консоли.
Как мне запустить задание в Unix?
Запуск процесса Unix в фоновом режиме
- Чтобы запустить программу подсчета, которая отобразит идентификационный номер процесса задания, введите: count & amp;
- Чтобы проверить статус вашего задания, введите: jobs.
- Чтобы вывести фоновый процесс на передний план, введите: fg.
- Если в фоновом режиме приостановлено несколько заданий, введите: fg% #
Какие команды вы можете использовать для завершения запущенного процесса?
Для уничтожения процесса используются две команды:
Как запустить процесс в Linux?
Самый простой способ запустить процесс — это ввести его имя в командной строке и нажать Enter. Если вы хотите запустить веб-сервер Nginx, введите nginx. Возможно, вы просто хотите проверить версию.
Как я могу возобновить остановленную работу в Linux?
Команда fg — это то, что вы хотите использовать. Вы также можете указать номер задания, если остановлено несколько заданий.
- jobs — список текущих работ
- fg — возобновить работу, которая следующая в очереди
- fg% [число] — возобновить работу [номер]
- bg — выдвинуть следующее задание в очереди в фоновый режим
- bg% [число] — отодвинуть задание [число] на задний план
- kill% [число] — убить задание с номером [число]
- kill — [сигнал]% [номер] — отправить сигнал [сигнал] на номер задания [номер]
- disown% [число] — отменить процесс (терминал больше не будет владельцем), поэтому команда будет работать даже после закрытия терминала.
Это почти все из них. Обратите внимание на% infront номера задания в командах — это то, что говорит kill, вы говорите о заданиях, а не процессах.
Вы также можете ввести % ; то есть вы нажимаете Ctrl-Z в emacs, затем вы можете набрать %emacs в консоли и вернуть его на передний план.
Просто чтобы добавить к другим ответам, Bash позволяет пропустить fg если вы указали номер работы.
Например, они эквивалентны и возобновляют последнюю работу:
Если вы не запускали его с текущего терминала, используйте ps aux | grep чтобы найти номер процесса (pid), затем возобновите его с:
(Несмотря на название, kill — это просто инструмент для отправки сигнала процессу, позволяющий процессам взаимодействовать друг с другом. «Сигнал уничтожения» — это только один из многих стандартных сигналов.)
Дополнительный совет: оберните первый символ имени процесса с помощью [] чтобы в результатах не отображалась сама команда grep . например, чтобы найти процесс emacs , используйте ps aux | grep [e]macs