簡體   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