我正在尝试在后台运行C程序。我也想保存程序的stdout-outputs。
但是,如果我尝试以下操作,则nohup仅将stderr-outputs重定向到logfile.txt:
nohup ./GetTempValues 11 4 > logfile.txt 2>&1 &
其中11和4是我需要传递给程序的参数,最后一个&
是用于在后台运行程序的参数(GetTempValues是我的程序)。
正如Guido在上面指出的那样,除非您将标准错误重定向到文件,否则nohup已经为您重定向了标准错误。如果您使用的是Linux,在nohup下运行一个简单命令并查看dup2(2)
之前的调用可能会很有帮助execve(2)
。
我怀疑您在看自己在看的东西。让我们想一想当你说
nohup foo 2>&1
nohup.out
(文件描述符3),将其复制到文件描述符1,然后关闭3。nohup.out
。exec
使用命令行中提供的任何参数(在这种情况下为foo)进行调用。新进程继承了nohup为其设置的文件描述符。如您所说,您无法在命令行中创建nohup仅重定向stderr-outputs的情况。nohup始终将stdout和stderr写入文件。stdout要么是通过重定向指定的,要么是nohup.out
;除非您将stdout显式重定向到另一个文件,否则stderr将遵循stdout。
2>&1
与nohup一起使用的一个特殊方面是GNU的版本在stderr nohup上产生了一条毫无意义的消息:忽略输入并将输出附加到'nohup.out'。(还有哪个实用程序会向标准错误写一条消息,相当于按照说明按照说明行事?)。通常情况下,噪声会写入终端。在重定向下,它作为输出文件的第一行结束。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句