当我在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
向您显示当前终端 session 中已停止或正在运行的所有作业。 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
是要与&
一起使用的,因此您的问题有点奇怪。关于c++ - Nohup C++ fstream,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13896967/