是否可以让进程以 nohup 启动,写入标准输出而不是文件?或者可能在文件和屏幕上?
nohup python start.py &
Run Code Online (Sandbox Code Playgroud)
写入nohup.out,但我希望它输出到屏幕上, nohup 仅在连接中断时用作对冲。
小智 10
来自man nohup:
如果标准输入是终端,则从 /dev/null 重定向它。如果标准输出是终端,
nohup.out则尽可能将输出附加到 ,$HOME/nohup.out否则。如果标准错误是终端,则将其重定向到标准输出。要将输出保存到 FILE,请使用nohup COMMAND > FILE.
(根据评论完全修改)
当退出shell或关闭终端时,子进程会被发送SIGHUP(挂断,这个名字起源于终端拨入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 结束时离开进程而不是杀死它。
您可以使用单独的进程来检查文件,或使用终端多路复用器(如screen或 )来实现此目的tmux。
nohup python start.py & tail -f nohup.out 该tail -f会被杀死,随意重启,不会影响蟒蛇过程。
screen python start.py 并随意断开/重新连接。| 归档时间: |
|
| 查看次数: |
24774 次 |
| 最近记录: |