nohup C++ fstream

nohup C++ fstream

本文关键字:fstream C++ nohup      更新时间:2023-10-16

当我在Linuxit下用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.txtstrace应该将所有系统调用转储到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是要与&一起使用的,所以您的问题有点奇怪。