[英]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.