
Рассмотрим следующее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:
экран:
- Экран - Сообщество Ubuntu Документация
- GNU Screen: введение и руководство для начинающих
- сочетания клавиш на экране
правка: добавлены ссылки на праймеры 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.