2014-10-20 97 views
-2

我有一個C程序的應用程序/二進制文件,默認情況下它使用shell從用戶那裏獲取輸入。所以,當我使用&在後臺啓動應用程序時,它會自動停止,因爲我沒有訪問權限的實現。當我運行此代碼如何在使用shell的後臺運行linux應用程序?

iStatus = system("./flute-static -send -a232.0.0.1/6666 a.txt &"); 

它給出輸出[1] 21970,pid。

然後,如果我按下另一個輸入,它使輸出

[1]+ Stopped     ./flute-static -send -a232.0.0.1/6666 a.txt 

很顯然它不能發送數據。我該如何解決這個問題。請幫幫我。提前致謝。

+1

您可以在前臺啓動進程(沒有&),然後在輸入憑據後將其發送到後臺(在bash下:按ctrl-z,然後鍵入bg,然後返回)。但這不是編程問題... – sergio 2014-10-20 11:14:28

+2

這不是一個編程問題,屬於[unix](http://unix.stackexchange.com/)站點。但是答案可能是你試圖做一些沒有道理的事情 - 如果程序需要從標準輸入讀取輸入,你需要將它的標準輸入附加到提供輸入的東西上。 – geoffspear 2014-10-20 11:14:31

+0

對不起,誤會。其實我正在用system()函數從c程序運行它。我修改了這個問題。 @sergio現在可以幫我嗎? – JatiA 2014-10-20 11:26:27

回答

1

您可以嘗試nohup

iStatus = system("nohup ./flute-static -send -a232.0.0.1/6666 a.txt &"); 

NOHUP是指:不終止,即使stty的被切斷了這一過程。

或者您可以使用screen

https://www.mattcutts.com/blog/a-quick-tutorial-on-screen/

+0

謝謝。我嘗試了,但它給了以下錯誤「[2] - 退出255 nohup ./flute-static -send -a232.0.0.1/6666 JFlute.1.2.tar.gz」。 – JatiA 2014-10-20 11:29:21

0

閱讀Advanced Linux Programming和有關fork system call;您肯定希望使用fork(2),execve(2),waitpid(2)與其他一些syscalls(2)和/或可能daemon(3)和/或popen(3)。可能在flute-static程序上使用strace(1)可能會幫助您更多地瞭解它。

順便說一句,你可能會使用一些FLUTE library(從源代碼編譯MAD-ALCLIB!),或者乾脆使用HTTP & FTP客戶端庫像libcurl

不管你做什麼,如果轉到後臺進程正在讀取標準輸入,它停止(見​​,tty(4)等)!請閱讀tty demystified

+0

謝謝。我必須使用flute協議和你提供的鏈接中可用的二進制文件,在fedora 19中不起作用。我正在使用另一個二進制文件。如果你稍微解釋第一點,這將非常有幫助。 – JatiA 2014-10-20 11:42:28

+0

您需要花幾個小時才能閱讀參考文獻。我沒有很多時間(幾小時或幾天)來解釋你在很多書籍和資源中很好地解釋了什麼。 – 2014-10-20 11:43:50