2015-09-06 67 views
0

所以我在unix中創建了一個c程序。這就是它所做的。Exec()和Fork()

1)它分叉了一個過程。

子進程: 執行execv(),其上打印「報警響」的「x」秒後

父進程一個鬧鐘程序: 執行waitpid函數對兒童的上方。 然後退出。

輸出: 所以我跑了它,我收到

一切正常的「X秒後報警響」。但現在我想要的是子進程在後臺運行。這意味着我不想看到它的輸出。但我希望它運行並退出。

+0

再次分叉子叉,並在這個大孩子做執行。 更多信息:http://stackoverflow.com/questions/10932592/why-fork-twice – alk

+0

我讓孩子叉子成爲執行者的孫子。然後,我讓孩子不用等待grandchi; d。我仍然看到孫子的輸出=/ – RStyle

+0

你會從登錄shell或在啓動時作爲系統進程調用你的程序嗎?一個「守護進程」(你的標記)是一回事,「背景」(你的措辭)是兩件事之一,壓制或重定向輸出(也許你的需要?)是另一回事。你究竟想要什麼? – pilcrow

回答

0

要使子進程在後臺運行,您需要將其設置爲daemon process

有幾個步驟來使它成爲一個守護進程..

  1. 叉掉父進程
  2. 更改文件模式掩碼(umask)
  3. 打開任何日誌寫
  4. 創建唯一的會話ID(SID)
  5. 將當前工作目錄更改爲安全的地方
  6. 關閉標準文件描述符

有關更好的解釋,請參見this