是否可以让一个进程用 nohup 启动,写入 stdout 而不是文件?或者也许在文件中和屏幕上?
nohup python start.py &
写入nohup.out
,但我希望它输出到屏幕,nohup 仅在连接中断时作为对冲。
答案1
您可以通过单独的进程检查文件来实现这一点,或者通过使用终端多路复用器(如screen
或 )来实现tmux
。
nohup python start.py & tail -f nohup.out
可以tail -f
随意杀死并重新启动,而不会影响python进程。
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 проекты