繁体   English   中英

Nohup C ++ fstream

[英]nohup C++ fstream

当我在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;
}

你能指出我的错误吗?

我一开始没有得到,但似乎您的系统正在决定将程序置于挂起状态(“已Stopped状态)。 jobs显示您在当前终端会话中已停止或正在运行的所有作业。 bg / fg可用于重新启动已停止的作业,因此您可以检查是否导致文件被写入。 进一步探查原因的另一个想法是运行/usr/bin/nohup strace ./a.out 1>stdout.txt 2>stderr.txt strace应该将所有系统调用都转储到stderr.txt ,因此您可能能够看到有关停止原因的指示。

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

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

在我的系统上,它将自动使用以下命令运行它:

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

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

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

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

因此,另一项调查是:为什么看不到此消息?


另一条攻击线是,由于您的系统似乎不喜欢使用&来启动nohup ,因此它会通过以下操作将Stopped程序作为后台任务重新启动:

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

显然, nohup是用于& ,所以您的问题有点奇怪。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM