Davoud Taghawi-Nejad Asked: 2012-08-05 14:00:45 +0800 CST2012-08-05 14:00:45 +0800 CST 2012-08-05 14:00:45 +0800 CST 将 nohup 重定向到标准输出 772 是否可以让一个进程以 nohup 启动,写入 stdout 而不是写入文件?或者可能在文件和屏幕上? nohup python start.py & 写入nohup.out,但我希望它输出到屏幕,nohup 仅在连接中断时用作对冲。 nohup 3 个回答 Voted dsh 2012-08-05T14:07:26+08:002012-08-05T14:07:26+08:00 来自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 死亡,这会破坏管道并将 SIGPIPE 发送到 nohup 进程,导致它死亡。我没有考虑目的就回答了这个问题。 为了实现您的目的,请运行nohup COMMAND > FILE以选择要直接输出到的文件的名称。然后用于tail -f FILE观察终端上的输出。 类似地,可以使用以下 shell 构造:COMMAND >FILE 2>&1 </dev/null &运行一个命令,其 stdio 流未连接到终端,并且可以在终端关闭后继续运行。此外,在 zsh 中,运行 shell-builtindisown告诉 zsh 离开进程而不是在 shell 结束时杀死它。 Best Answer Henk Langeveld 2012-08-05T16:21:48+08:002012-08-05T16:21:48+08:00 您可以通过一个单独的进程来检查文件,或者通过使用终端多路复用器(如screen或)来实现这一点tmux。 nohup python start.py & tail -f nohup.out tail -f可以随意杀掉重启,不影响python进程。 screen python start.py并随意断开/重新连接。 Vladimir Gamaley 2020-01-17T10:03:24+08:002020-01-17T10:03:24+08:00 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 проекты
来自
man nohup
:(完全根据评论修改)
当退出shell或关闭终端时,子进程将发送SIGHUP(挂断,名称源于终端拨入UNIX计算机时的时间)告诉他们终端没有连接时间更长。此外,当 shell 进程结束时,子进程的 stdin、stdout 和 stderr 流将被关闭。通常这会导致子进程死亡。通常这是一件好事,因为它避免了让进程在没有用户的情况下运行。
该
nohup
程序的目的是即使在 shell 终止和终端断开连接后也能保持进程运行。因此,将其输出定向到终端完全违背了目的。我最初的回答 (nohup COMMAND | cat
) 没有帮助,因为:当终端关闭时,cat 的输出关闭,因此 cat 死亡,这会破坏管道并将 SIGPIPE 发送到 nohup 进程,导致它死亡。我没有考虑目的就回答了这个问题。为了实现您的目的,请运行
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
可以随意杀掉重启,不影响python进程。screen python start.py
并随意断开/重新连接。