Можно ли запустить процесс с помощью nohup, записать в стандартный вывод, а не в файл? а может в файле и на экране?
nohup python start.py &
пишет в nohup.out
, но я бы хотел, чтобы он выводился на экран, nohup предназначен только для защиты при разрыве соединения.
Из 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 покинуть процесс, а не убить его при завершении оболочки.
Вы можете добиться этого с помощью отдельного процесса проверки файла или с помощью терминального мультиплексора, например screen
или tmux
.
nohup python start.py & tail -f nohup.out
В tail -f
может быть убит и перезапущен по желанию, не затрагивая процесс python.
screen python start.py
и отключите / повторно подключитесь по желанию.vladimir@lin-mint-cin:~$ tty<br>
/dev/pts/8<br>
vladimir@lin-mint-cin:~$ ln -sf /dev/pts/8 nohup.out<br>
vladimir@lin-mint-cin:~$ nohup ls<br>
nohup: ввод игнорируется, вывод добавляется в 'nohup.out'<br>
2019-05-31-090159.jpg giphy.gif nim_porojects sketchbook
Aptana_Studio_Workspace IdeaProjects nohup.out target
Desktop jack_capture_01.wav Pictures Templates
Documents lib Postman tmp
Downloads mad Projects trace.edn
eclipse Mail prolog_ws uinfild_hill-iskusstvo_shemotehniki_tom_1_izd4-e-1489315100.pdf
eclipse-dsl-workspace Music proxy-secret Videos
eclipse-workspace mygolo Public workspace-dltk
erlang_ex my_golo_ws rust-workspace проекты