是否可以让进程从nohup开始,写到stdout而不是文件中?还是在文件和屏幕上?
nohup python start.py &
写入nohup.out
,但我希望将其输出到屏幕,nohup仅在连接断开时用作树篱。
是否可以让进程从nohup开始,写到stdout而不是文件中?还是在文件和屏幕上?
nohup python start.py &
写入nohup.out
,但我希望将其输出到屏幕,nohup仅在连接断开时用作树篱。
Answers:
来自man nohup
:
如果标准输入是终端,请从/ dev / null重定向它。如果标准输出是端子,
nohup.out
则在可能的情况下附加输出$HOME/nohup.out
。如果标准错误是终端,请将其重定向到标准输出。要将输出保存到FILE,请使用nohup COMMAND > FILE
。
(根据注释进行了完全修订)
退出外壳程序或关闭终端时,将向子进程发送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-builtin disown
告诉zsh退出进程,而不是在shell结束时将其杀死。
tail -f filename
用来查看写入文件的内容。
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 проекты