【问题标题】:nohup C++ fstreamnohup C++ fstream
【发布时间】:2012-12-15 22:58:34
【问题描述】:

当我在 Linux 下使用 g++ 编译以下 C++ 代码时,它工作正常,但是当我尝试运行时

nohup ./a.out &

信息立即停止

[7]+  Stopped                 nohup ./a.out

源代码为:

#include <iostream>
#include <fstream>

using namespace std;

int main(void){

    ofstream file("hm.txt",ios::out | ios::binary | ios::app);
    file << "123";
    file.close();

return 0;
}

你能指出我的错误吗?

【问题讨论】:

  • 当我尝试执行 ./a.out 时一切正常。
  • 抱歉,我不够清楚,当使用 nohup 调用时,它会立即停止而不创建任何文件。
  • 据我所知应该打印:[1]+ Done nohup ./a.out。这就是它在我的电脑上的工作方式。我不确定Stopped 来自哪里。
  • 试试/usr/bin/nohup...
  • 感谢您的建议,我刚刚尝试了以下两个版本都没有效果:/usr/bin/nohup /home/me/cpp/a.out &/usr/bin/nohup ./a.out &

标签: c++ linux g++ fstream nohup


【解决方案1】:

一开始我没听懂,但您的系统似乎决定将程序置于暂停状态(Stopped 状态)。 jobs 显示在当前终端会话中停止或运行的所有作业。 bg/fg 可用于重新启动停止的作业,因此您可以检查是否导致文件被写入。进一步探究原因的另一个想法是运行/usr/bin/nohup strace ./a.out 1&gt;stdout.txt 2&gt;stderr.txtstrace 应该将所有系统调用转储到 stderr.txt - 这样您就可以看到它停止的原因。

此类问题的常见原因似乎是程序需要一些输入,并且由于(使用nohup)没有终端来提供它,系统会停止您的程序。我的第一个建议是尝试以下方法以提供一些自动生成的输入:

/usr/bin/nohup ./a.out </dev/zero

在我的系统上,它会自动运行它:

/usr/bin/nohup ./a.out </dev/null

我不知道为什么你的系统不会自动提供空输入,我也不知道你的程序为什么会等待输入。您最初的尝试对我来说效果很好(我无法重现您的问题)。

当我运行nohup ./a.out(或nohup ./a.out &amp;)时,我收到以下消息,表示自动输入抑制:

nohup: ignoring input and appending output to `nohup.out'

所以另一条调查线是:你为什么没有看到这条消息?


另一条攻击线,因为您的系统似乎不喜欢带有&amp;nohup,因此将Stopped 程序作为后台任务重新启动,如下所示:

/usr/bin/nohup ./a.out & bg

很明显,nohup 应该和&amp; 一起使用,所以你的问题有点奇怪。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-05
    相关资源
    最近更新 更多