Запуск остановленного процесса linux

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

На самом деле это довольно нормальный рабочий процесс для Vim, если вы хотите сохранить свои команды в своей истории bash, тогда вы нажимаете Ctrl-z клавишу, а затем возобновляете. Очевидно, что вы можете запускать команды, не выходя из Vim с помощью команды :! ed

Команда fg — это то, что вы хотите использовать. Вы также можете указать номер задания, если остановлено несколько заданий.

для справки, fg — «передний план». Вы также можете продолжить работу в фоновом режиме с помощью «bg».

Общие команды управления заданиями в Linux:

  • jobs — список текущих работ
  • fg — возобновить работу, которая следующая в очереди
  • fg% [число] — возобновить работу [номер]
  • bg — выдвинуть следующее задание в очереди в фоновый режим
  • bg% [число] — отодвинуть задание [число] на задний план
  • kill% [число] — убить задание с номером [число]
  • kill — [сигнал]% [номер] — отправить сигнал [сигнал] на номер задания [номер]
  • disown% [число] — отменить процесс (терминал больше не будет владельцем), поэтому команда будет активна даже после закрытия терминала.

Это почти все из них. Обратите внимание на% infront номера задания в командах — это то, что говорит kill, вы говорите о заданиях, а не процессах.

Вы также можете ввести % ; то есть вы нажимаете Ctrl-Z в emacs, затем вы можете набрать %emacs консоль и вернуть ее на передний план.

Просто чтобы добавить к другим ответам, Bash позволяет пропустить, fg если вы указали номер работы.

Например, они эквивалентны и возобновляют последнюю работу:

% это здорово, спасибо! Как машинистка на ощупь, я нахожу fg очень раздражающим (тот же палец). Но тогда так и есть cd .

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

Если вы не запускали его с текущего терминала, используйте, ps aux | grep чтобы найти номер процесса (pid), а затем возобновите его с помощью:

(Несмотря на название, kill это просто инструмент для отправки сигнала процессу, позволяющий процессам связываться друг с другом. «Сигнал уничтожения» — это только один из многих стандартных сигналов.)

Дополнительный совет: оберните первый символ имени процесса, [] чтобы сама grep команда не появлялась в результатах. например, чтобы найти emacs процесс, используйте ps aux | grep [e]macs

Источник

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

Команда fg — это то, что вы хотите использовать. Вы также можете указать номер задания, если остановлено несколько заданий.

  • jobs — список текущих работ
  • fg — возобновить работу, которая следующая в очереди
  • fg% [число] — возобновить работу [номер]
  • bg — выдвинуть следующее задание в очереди в фоновый режим
  • bg% [число] — отодвинуть задание [число] на задний план
  • kill% [число] — убить задание с номером [число]
  • kill — [сигнал]% [номер] — отправить сигнал [сигнал] на номер задания [номер]
  • disown% [число] — отменить процесс (терминал больше не будет владельцем), поэтому команда будет работать даже после закрытия терминала.
Читайте также:  Backup windows server with linux

Это почти все из них. Обратите внимание на% infront номера задания в командах — это то, что говорит kill, вы говорите о заданиях, а не процессах.

Вы также можете ввести % ; то есть вы нажимаете Ctrl-Z в emacs, затем вы можете набрать %emacs в консоли и вернуть его на передний план.

Просто чтобы добавить к другим ответам, Bash позволяет пропустить fg если вы указали номер работы.

Например, они эквивалентны и возобновляют последнюю работу:

Если вы не запускали его с текущего терминала, используйте ps aux | grep чтобы найти номер процесса (pid), затем возобновите его с:

(Несмотря на название, kill — это просто инструмент для отправки сигнала процессу, позволяющий процессам взаимодействовать друг с другом. «Сигнал уничтожения» — это только один из многих стандартных сигналов.)

Дополнительный совет: оберните первый символ имени процесса с помощью [] чтобы в результатах не отображалась сама команда grep . например, чтобы найти процесс emacs , используйте ps aux | grep [e]macs

Источник

Как запустить уже остановленную программу в фоне не переходя в 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 для процесса и как его прерывать?

Читайте также:  Command line mode in linux

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

Источник

Команда nohup в Linux

В Linux команда nohup (HangUP) поддерживает работу процессов даже после выхода из оболочки или терминала.

Примеры использования команды nohup в Linux

Команда предотвращает получение процессами или заданиями сигнала SIGHUP, который отправляется процессу при закрытии или выходе из терминала.

Синтаксис

Ввод и вывод

Если стандартный ввод является терминалом, то он берётся из нечитаемого файла.

Если стандартный вывод является терминалом, то вывод добавляется в nohup.out , при наличии возможности, в противном случае — сюда:

Если стандартный поток ошибок является терминалом, то он перенаправляется в стандартный вывод. Запись вывода в ФАЙЛ осуществляется так:

Читайте также:  Сменить права доступа файла linux

Использование команды nohup в Linux

Проверка версии утилиты

Для проверки версии утилиты используется следующий синтаксис:

oleg@mobile:~:$ nohup --v nohup (GNU coreutils) 9.1 Copyright (C) 2022 Free Software Foundation, Inc. Лицензия GPLv3+: GNU GPL версии 3 или новее. Это свободное ПО: вы можете изменять и распространять его. Нет НИКАКИХ ГАРАНТИЙ в пределах действующего законодательства. Автор программы — Jim Meyering. oleg@mobile:~:$

Запуск процесса

Для того чтобы процессы/задания выполнялись в оболочке и не были бы уничтожены при выходе из неё команда выполняется так:

oleg@mobile:~:$ nohup ~/Directory/convert.sh nohup: ввод игнорируется, вывод добавляется в 'nohup.out' oleg@mobile:~:$ 

В скрипт я внёс ошибку. Вывод команды был сохранен в nohup.out :

oleg@mobile:~:$ cat nohup.out mkdir: невозможно создать каталог «thumbnails»: Файл существует convert: unable to open image '*.jpg': Нет такого файла или каталога @ error/blob.c/OpenBlob/3569. convert: no images defined `thumbnails/*.jpg.png' @ error/convert.c/ConvertImageCommand/3342. oleg@mobile:~:$ 

Вывод можно также перенаправить в другой файл:

oleg@mobile:~:$ nohup ~/Directory/convert.sh > output.txt nohup: ввод игнорируется и поток ошибок перенаправляется на стандартный вывод oleg@mobile:~:$ cat output.txt mkdir: невозможно создать каталог «thumbnails»: Файл существует convert: unable to open image '*.jpg': Нет такого файла или каталога @ error/blob.c/OpenBlob/3569. convert: no images defined `thumbnails/*.jpg.png' @ error/convert.c/ConvertImageCommand/3342. oleg@mobile:~:$ 

Можно перенаправить в файл и стандартную ошибку и вывод с использованием атрибута 2>&1 :

oleg@mobile:~:$ nohup ~/Directory/convert.sh > output.txt 2>&1 oleg@mobile:~:$ cat output.txt nohup: ввод игнорируется mkdir: невозможно создать каталог «thumbnails»: Файл существует convert: unable to open image '*.jpg': Нет такого файла или каталога @ error/blob.c/OpenBlob/3569. convert: no images defined `thumbnails/*.jpg.png' @ error/convert.c/ConvertImageCommand/3342. oleg@mobile:~:$ 

Запуск процесса в фоновом режим

Для запуска процесса в фоновом режиме в конце команды добавляется символ & . Для примера пингуем linuxcookbook.ru и отправляем его в фоновый режим:

oleg@mobile:~:$ nohup ping linuxcookbook.ru & [1] 122843 oleg@mobile:~:$ nohup: ввод игнорируется, вывод добавляется в 'nohup.out' oleg@mobile:~:$ cat nohup.out PING linuxcookbook.ru (139.162.132.20) 56(84) bytes of data. 64 bytes from li1398-20.members.linode.com (139.162.132.20): icmp_seq=1 ttl=52 time=43.5 ms 64 bytes from li1398-20.members.linode.com (139.162.132.20): icmp_seq=2 ttl=52 time=41.2 ms 64 bytes from li1398-20.members.linode.com (139.162.132.20): icmp_seq=3 ttl=52 time=37.3 ms 64 bytes from li1398-20.members.linode.com (139.162.132.20): icmp_seq=4 ttl=52 time=40.2 ms 64 bytes from li1398-20.members.linode.com (139.162.132.20): icmp_seq=5 ttl=52 time=36.5 ms 64 bytes from li1398-20.members.linode.com (139.162.132.20): icmp_seq=6 ttl=52 time=39.1 ms 64 bytes from li1398-20.members.linode.com (139.162.132.20): icmp_seq=7 ttl=52 time=39.5 ms 64 bytes from li1398-20.members.linode.com (139.162.132.20): icmp_seq=8 ttl=52 time=38.7 ms 64 bytes from li1398-20.members.linode.com (139.162.132.20): icmp_seq=9 ttl=52 time=41.1 ms . oleg@mobile:~:$

Для проверки работы процесса в фоне применяется команда pgrep с опцией -a :

oleg@mobile:~:$ pgrep -a ping 122843 ping linuxcookbook.ru oleg@mobile:~:$ 

Остановка запущенного процесса

Для остановки запущенного процесса используется команда kill , за которой следует идентификатор (ID) процесса:

oleg@mobile:~:$ kill 122843 oleg@mobile:~:$ 

Выводы

Из приведённых примеров использования в Linux команды nphup следует:

  • все процессы, запущенные с помощью этой команды, будут игнорировать сигнал SIGHUP даже после выхода из оболочки;
  • как только задание запущено или выполнено, стандартный ввод будет недоступен для пользователя;
  • файл nohup.out используется по умолчанию для stdout и stderr .

Источник

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