【问题标题】:How to get stdout from background?如何从后台获取标准输出?
【发布时间】:2016-01-30 18:22:39
【问题描述】:

假设我有一个 C++ 程序一直像这样产生输出

#include <iostream>

using namespace std;

void main()
{
    int i=0;
    while(1)
    {
        cout << (i++)%10 << endl;
    }
}

我现在想在远程 linux 服务器的后台运行这个程序。如果我这样做

nohup ./program &>/dev/null &

然后我根本没有得到任何输出。如果我这样做了

nohup ./program &

所有输出都被写入 nohup.out,淹没我的硬盘。

如何在后台关闭输出并在程序在前台时打开输出到控制台?

【问题讨论】:

  • 似乎您要求在登录到远程服务器时在终端上打印进程,并且在您注销时不要在任何地方打印。你能在你的具体情况下澄清“背景”和“前景”之间的区别吗?
  • 在我登录到远程服务器时,进程不应该一直打印到终端,不。在我告诉他“告诉我发生了什么事”之前,它不应该在任何地方打印。然而,计算必须一直进行..
  • 好的。你想如何告诉程序“告诉我发生了什么”?在我看来,您应该将其放入程序中。或者在包装外壳脚本中。
  • 是的,这正是我要问的问题:) 无法更改程序本身。
  • 如果是这种情况,我只能考虑使用类似logrotate 的方法,当您想查看发生了什么时,您会在日志文件上使用tail。这就是我能提供多少帮助。希望澄清将帮助其他人为您提供更有用的帮助。

标签: linux terminal background-process nohup


【解决方案1】:

只是猜测,但您可以将 nohup.out 链接到 /dev/null 并删除链接以打开登录文件。

创建一个符号链接: ln -s /dev/null nohup.out

删除链接: rm nohup.out

如果在您删除链接后 nohup 没有创建日志文件,您可能需要创建它

touch nohup.out

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    • 2013-02-23
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    • 2018-08-08
    相关资源
    最近更新 更多