Вернуться к остановленному процессу 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

Читайте также:  Linux команда date примеры

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

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

Читайте также:  Acrobat pro for linux

Источник

Как мне запустить остановленную работу в Linux?

Вы можете легко использовать команду остановки или CTRL-z, чтобы приостановить задачу. А затем вы можете использовать fg позже, чтобы возобновить задачу с того места, где она была остановлена.

Как начать приостановленный процесс?

[Уловка] Приостановить / возобновить ЛЮБУЮ задачу в Windows.

  1. Откройте монитор ресурсов.
  2. Теперь на вкладке «Обзор» или «ЦП» найдите процесс, который нужно приостановить, в списке запущенных процессов.
  3. Как только процесс будет найден, щелкните его правой кнопкой мыши, выберите «Приостановить процесс» и подтвердите приостановку в следующем диалоговом окне.

Как запустить фоновое задание 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 в фоновом режиме

  1. Чтобы запустить программу подсчета, которая отобразит идентификационный номер процесса задания, введите: count & amp;
  2. Чтобы проверить статус вашего задания, введите: jobs.
  3. Чтобы вывести фоновый процесс на передний план, введите: fg.
  4. Если в фоновом режиме приостановлено несколько заданий, введите: 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

Источник

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