我有一个程序(c ++)将数据输出到终端。我在SSH上的机器上运行它。我需要能够:
现在,我一直这样做:
nohup ./freqnew <testparams.txt &> testrun3.out&
这几乎是我想要的。它将程序中的数据放入文件testrun3.out中,并在关闭终端窗口后在后台运行。但是,在程序完成之前,.out文件完全为空。
当我开始长时间运行时,它们可能需要数周时间,但我需要定期访问数据以确保它是合理的。
有什么想法吗?
答案 0 :(得分:0)
您应该尝试flush()
将数据推送到磁盘:
http://www.cplusplus.com/reference/ostream/ostream/flush/
答案 1 :(得分:0)
由于您正在使用程序的输出,因此您可以使用tee
或script
将输出重定向到文件,而那些显然具有更好的刷新功能(like in this answer)。
这也让你可以看到屏幕上的输出并将其保存到磁盘(如果这是一个理想的功能)。
nohup ./freqnew <testparams.txt 2>&1 | testrun3.out
答案 2 :(得分:0)
一种选择是将cout
重定向到您想要的文件:
std::ofstream out("out.txt");
std::streambuf *coutbuf = std::cout.rdbuf(); //save old buf
std::cout.rdbuf(out.rdbuf()); //redirect std::cout to out.txt!