Вывести задачу nohup на передний план

Вывести задачу nohup на передний план

Рассмотрим следующееnohupисполнение:

nohup script.sh > script.out &

Есть ли способ выйти из терминала, подключиться заново, вернуть процесс на передний план и взаимодействовать с ним с помощью клавиатуры?

решение1

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

nohupне помещает автоматически команду, которую он запускает, в фоновый режим. Это нужно сделать явно, закончив командную строку &.

$ nohup ./script.sh &
[1] 3390
$ nohup: ignoring input and appending output to ‘nohup.out’

jobsможет печатать текущие задания и их статус. Если команда jobsне может его найти, то это больше недочерний процессэтой оболочки.

$ jobs 
[1]+  Running                 nohup ./script.sh &

Можно вернуть фоновое задание на передний план в bash, используя fgдаже если оно запущено с nohup. Но это не изменитперенаправление вывода, который все равно будет идти в файлnohup.out.

$ fg
nohup ./script.sh

Если вы закроете оболочку/терминал или выйдете из системы, ваша команда больше не будет дочерней по отношению к этой оболочке. Она принадлежитinitпроцесс. Если вы выполните поиск, то pstreeувидите, что теперь он принадлежит процессу 1 ( init). Его нельзя вернуть на передний план, поскольку передний план больше не существует.

решение2

Если вы хотите запустить скрипт, запустить его без вывода, беспокоящего ваш терминал, а затем вызвать его позже, чтобы взаимодействовать с ним, вы можете взглянуть на терминальный мультиплексор. В зависимости от вашей системы я бы рекомендовал tmuxили screen. Вы можете найти некоторую информацию о том, как их использовать, по ссылкам ниже:

тмукc:

экран:

правка: добавлены ссылки на праймеры tmux

решение3

Я поддерживаю использование терминального мультиплексора, ноtmux, а не экран. Экран, по всем намерениям и целям, не поддерживается. Его конфигурация — темное искусство, вероятно, впервые записанное в приложении к Некрономикону. Попытка написать собственную конфигурацию — это как проблеск Ктулху. Серьезно. Посмотрите вокруг на людейФайлы .screenrc. Конечно, есть способы смягчить отвратительность экрана в отношении файла конфигурации.Бёбувыполняет замечательную работу в качестве завесы между смертными пользователями и нечестивым кодом. Он поставляется с разумными цветами, интерфейсом меню и, возможно, самое главное, строкой состояния.

Но как я уже сказал, я рекомендуюtmuxВместо этого. Это все еще требует некоторой незначительной настройки, но этохорошо документированы, и ваш файл конфигурации не будет выглядеть как тарабарщина. Кроме того, вы начинаете с цветов и строки состояния. Сравните мои файлы screenrc и tmux.conf:

решение4

Любую команду Linux можно отправить в фоновый режим, &добавив в конце символ «».

Чтобы просмотреть все фоновые задания, вы можете выполнить командуjobs

jobs
[1]  + suspended  nohup sh zookeeper-server-start.sh ../config/zookeeper.properties
[2]    running    nohup sh kafka-server-start.sh ../config/server.properties
[3]  - running    nohup sudo mongod --dbpath=/var/lib/mongodb

Здесь я запускаю три задания в фоновом режиме: zookeeper, kafka и mongo daemon. [1],[2] и [3] — соответствующие номера заданий для этих задач.

Вы можете вывести эти задачи на передний план, используяfg %$taskNumber.

Связанный контент