我想在后台运行一个C程序。我还想保存程序的标准输出。
但是,如果我尝试以下方法,nohup只会将stderr-输出重定向到logfile.txt:
nohup ./GetTempValues 11 4 > logfile.txt 2>&1 &其中11和4是我需要传递给我的程序的参数,最后一个&用于在后台运行程序(GetTempValues是我的程序)。
发布于 2016-04-11 00:33:16
正如Guido上面指出的,nohup已经为您重定向了标准错误,除非您将它重定向到一个文件。如果您使用的是Linux,那么在nohup下运行一个简单的命令并查看在dup2(2)之前对execve(2)的调用是有指导意义的。
我怀疑你看到的是你想看到的。让我们想想当你说
nohup foo 2>&1nohup.out (文件描述符3),将其设为文件描述符1,然后关闭3。nohup.out。exec。新进程继承nohup为其设置的文件描述符。在命令行中,您不能创建一种情况,如您所说,nohup只重定向stderr-输出。nohup总是将stdout和stderr写到文件中。stdout要么被您通过重定向指定,要么转到nohup.out;stderr遵循stdout,除非您显式地将它重定向到另一个文件。
在nohup中使用2>&1的一个特殊方面是,GNU的版本在stderr,nohup上产生了一个毫无意义的消息:忽略输入并将输出附加到‘nohup.out’。(还有什么实用程序会将消息写入标准错误,这相当于按照指令执行文档的操作?)通常,这种噪音被写入终端;在重定向下,它作为输出文件的第一行结束。
https://unix.stackexchange.com/questions/275526
复制相似问题