От man nohup
:
Если стандартный ввод является терминалом, перенаправьте его из / dev / null. Если стандартный вывод является терминалом, добавьте вывод, nohup.out
если возможно, в $HOME/nohup.out
противном случае. Если стандартной ошибкой является терминал, перенаправьте его на стандартный вывод. Чтобы сохранить вывод в файл, используйте nohup COMMAND > FILE
.
(полностью пересмотрено на основе комментариев)
При выходе из оболочки или закрытии терминала дочерние процессы будут отправлены SIGHUP (зависание, имя происходит со времени, когда терминалы будут подключаться к компьютеру UNIX), чтобы сообщить им, что терминал не больше подключен Кроме того, когда завершится процесс оболочки, потоки stdin, stdout и stderr дочернего процесса будут закрыты. Обычно это приводит к смерти детского процесса. Обычно это хорошо, потому что позволяет избежать запуска процессов без пользователя.
Цель nohup
программы - сохранить процесс работоспособным даже после завершения оболочки и отключения терминала. Таким образом, направление его вывода на терминал полностью противоречит цели. Мой первоначальный ответ ( nohup COMMAND | cat
) не помог, потому что: когда терминал закрыт, вывод cat закрывается, и cat умирает, что разрывает канал и отправляет SIGPIPE процессу nohup, что приводит к его смерти. Я ответил на вопрос, не думая о цели.
Для достижения цели запустите, nohup COMMAND > FILE
чтобы выбрать имя файла для прямого вывода. Затем используйте tail -f FILE
для просмотра вывода на терминале.
Точно так же можно использовать следующую конструкцию оболочки: COMMAND >FILE 2>&1 </dev/null &
для запуска команды, чьи потоки stdio не подключены к терминалу и могут продолжать работать после закрытия терминала. Кроме того, в zsh запустите встроенную оболочку, disown
чтобы сказать zsh, что нужно покинуть процесс, а не убивать его по окончании оболочки.