2013-01-16 96 views
1

我在c寫自己的shell,問題是在執行後臺進程。 現在。只要我們執行與「&」,那麼該過程進行背景 結束一個進程並開始執行BASH,後臺進程的輸出來對終端時後臺進程需要輸入則暫停,直到我們給「FG」命令。執行unix終端後臺進程。

那麼如何實現後臺進程呢?

對於任何命令的正常執行(不以&結尾),我調用fork系統調用,然後在子進程中執行命令,父進程將等待子進程的執行(通過wait())。

而對於'&'命令我做了同樣的事情,但父母不會等待子進程的執行。這裏我的問題是,只要後臺進程需要輸入,就可以控制終端。所以如何在需要輸入時暫停子進程。

+0

您拍照時一看在bash源代碼? http://ftp.gnu.org/gnu/bash/ –

回答

0

從父分離的過程中,你需要對孩子過程中使用setsid(),它會在新的會話中運行的程序

sid = setsid(); 

參見http://www.netzmafia.de/skripten/unix/linux-daemon-howto.html

+0

setsid用於創建新會話。這涉及三個步驟:(a)成爲新會話的會話領導者, (b)成爲新進程組的進程組組長, (c)沒有控制終端 但是,當我執行命令「fg」後臺進程在終端上進行控制。所以現在如果我使用setsid(),問題將會是如何將進程連接到另一個進程。 – adarsh