Можно ли позволить процессу, запущенному с nohup, писать в стандартный вывод, а не в файл? или может в файле и на экране?
nohup python start.py &
пишет nohup.out
, но я хотел бы, чтобы он выводил на экран, nohup предназначен только для хеджирования, когда разрывается соединение.
Ответы:
nohup python start.py & tail -f nohup.out
tail -f
Могут быть убиты и перезапущена по желанию.screen python start.py
и отключить / повторно подключиться по желанию.источник
От
man nohup
:(полностью пересмотрено на основе комментариев)
При выходе из оболочки или закрытии терминала дочерние процессы будут отправлены 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, что нужно покинуть процесс, а не убивать его по окончании оболочки.источник
tail -f filename
чтобы увидеть, что записано в файл.источник