2016-12-05 60 views
0

等待RETURN按鍵的一種方法是調用std :: ignore()。但是,當我使用nohup時std :: ignore()總是立即返回。有沒有其他的方法來等待按鍵,或只是返回,將與nohup一起工作?nohup和std :: ignore()不一起工作

回答

3

當您使用nohup運行一個命令,它所以沒有辦法等待任何一種按鍵的連接你的命令到/ dev/null的標準輸入。

當您嘗試從/ dev/null讀取數據時,它會自動響應EOF。

我想這可以使用下面的代碼(未經測試)檢查:

#include <unistd.h> 
... 
if (isatty(fileno(stdin))) ... 

這應該工作,爲標準保證std::cin與標準輸入有關。

+0

是的,但它不應該返回。在我的情況下,它會導致無限循環。請注意,輸入的重定向僅在Linux下發生。 – user1095108

+0

這就是從/ dev/null讀取的內容_does_ - 立即返回,零字節讀取。哦,POSIX指定nohup _可以從未指定的文件重定向標準輸入,如果有關聯的終端。在任何平臺上閱讀它可能都很脆弱。 – Useless

+0

如果在流結束時它不應該返回,它應該怎麼做?永遠阻止? –

0

我解決了這個問題:

std::this_thread::sleep_for(std::chrono::system_clock::duration::max()); 
+0

所以你只是想永遠睡覺?我從來不會從這個問題中猜出來。 – Useless

+0

從標準輸入讀取將立即返回,所以唯一要做的就是無限期地等待,我想。 – user1095108

+0

我指出你從來沒有說過你想要達到的目標,所以除了你之外,沒有人能夠猜出什麼行爲比立即返回或者爲什麼更好。這限制了答案的潛在質量。 – Useless

1

是否存在一種替代的方式來等待一個按鍵

從哪裏?按鍵不得不從某個地方來。您期望從控制終端中獲得它,然後您故意將該進程與該終端斷開連接。

是的,存在的替代品:

  1. ,如果你想從那裏輸入
  2. 從X讓你的按鍵事件,而不是不從終端斷開連接,假設你有運行
  3. 圖形環境
  4. 創建一個新的終端並從那裏獲取您的按鍵。這可能意味着在實踐中運行xterm,所以它不是微不足道的。

或只是返回,將與nohup一起工作?

std::ignore()已經確實回報,而你抱怨說。等待按鍵是唯一能爲你工作的東西嗎?

+0

我有一個應用程序類,對於控制檯應用程序,只是std :: ignore()等待一個RETURN,但是這會立即返回,所以無限期的延遲是要走的路。 – user1095108