首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将stdout重定向到带有nohup的文件中不起作用

将stdout重定向到带有nohup的文件中不起作用
EN

Unix & Linux用户
提问于 2016-04-10 17:18:29
回答 1查看 24.7K关注 0票数 3

我想在后台运行一个C程序。我还想保存程序的标准输出。

但是,如果我尝试以下方法,nohup只会将stderr-输出重定向到logfile.txt:

代码语言:javascript
复制
nohup ./GetTempValues 11 4 > logfile.txt 2>&1 &

其中11和4是我需要传递给我的程序的参数,最后一个&用于在后台运行程序(GetTempValues是我的程序)。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2016-04-11 00:33:16

正如Guido上面指出的,nohup已经为您重定向了标准错误,除非您将它重定向到一个文件。如果您使用的是Linux,那么在nohup下运行一个简单的命令并查看在dup2(2)之前对execve(2)的调用是有指导意义的。

我怀疑你看到的是你想看到的。让我们想想当你说

代码语言:javascript
复制
nohup foo 2>&1
  1. 外壳将stderr重定向到stdout。
  2. 然后调用nohup,它继承了这种情况(使用相同的文件描述符的stderr和stdout )。
  3. nohup打开nohup.out (文件描述符3),将其设为文件描述符1,然后关闭3。
  4. nohup注意到stderr不是文件,而dups文件描述符也是1到2。因此,文件描述符1和2都是指nohup.out
  5. nohup使用命令行中提供的任何参数(在本例中为foo)调用exec。新进程继承nohup为其设置的文件描述符。

在命令行中,您不能创建一种情况,如您所说,nohup只重定向stderr-输出。nohup总是将stdout和stderr写到文件中。stdout要么被您通过重定向指定,要么转到nohup.out;stderr遵循stdout,除非您显式地将它重定向到另一个文件。

在nohup中使用2>&1的一个特殊方面是,GNU的版本在stderr,nohup上产生了一个毫无意义的消息:忽略输入并将输出附加到‘nohup.out’。(还有什么实用程序会将消息写入标准错误,这相当于按照指令执行文档的操作?)通常,这种噪音被写入终端;在重定向下,它作为输出文件的第一行结束。

票数 5
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/275526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档