将 nohup 重定向到 stdout

将 nohup 重定向到 stdout

是否可以让一个进程用 nohup 启动,写入 stdout 而不是文件?或者也许在文件中和屏幕上?

nohup python start.py &

写入nohup.out,但我希望它输出到屏幕,nohup 仅在连接中断时作为对冲。

答案1

您可以通过单独的进程检查文件来实现这一点,或者通过使用终端多路复用器(如screen或 )来实现tmux

  1. nohup python start.py & tail -f nohup.out

可以tail -f随意杀死并重新启动,而不会影响python进程。

  1. screen python start.py并随意断开/重新连接。

答案2

man nohup

如果标准输入是终端,则将其从 /dev/null 重定向。如果标准输出是终端, nohup.out 则尽可能将输出附加到终端,$HOME/nohup.out否则。如果标准错误是终端,则将其重定向到标准输出。要将输出保存到 FILE,请使用 nohup COMMAND > FILE

(根据评论进行了全面修改)
退出 shell 或关闭终端时,将向子进程发送 SIGHUP(hangup,该名称源于终端拨入 UNIX 计算机的时代),以告知它们终端不再连接。此外,当 shell 进程结束时,子进程的 stdin、stdout 和 stderr 流将关闭。这通常会导致子进程死亡。通常这是一件好事,因为它可以避免在没有用户的情况下运行进程。

该程序的目的nohup是即使在 shell 终止并且终端断开连接后仍保持进程运行。因此,将其输出定向到终端完全违背了目的。我最初的答案 ( nohup COMMAND | cat) 没有帮助,因为:当终端关闭时,cat 的输出也会关闭,因此 cat 会死亡,从而破坏管道并向 nohup 进程发送 SIGPIPE,导致其死亡。我回答这个问题时没有考虑目的。

为了实现您的目的,请运行nohup COMMAND > FILE以选择要将输出定向到的文件名。然后使用tail -f FILE在终端上查看输出。

类似地,可以使用以下 shell 构造:COMMAND >FILE 2>&1 </dev/null &运行其 stdio 流未连接到终端并可在终端关闭后继续运行的命令。此外,在 zsh 中,运行 shell-builtindisown以告诉 zsh 退出进程,而不是在 shell 结束时终止它。

答案3

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  проекты

相关内容