2011-06-29 73 views
2

在我的程序中,我通過execl執行長壽命的尾部(帶-f)。 對execl的調用沒有得到執行。execl在unix中的行爲

我是否需要在後臺調用/執行此尾部以便我可以在程序中執行其他操作?

我經常口出我的程序的,按ctrl C.

回答

2

man page for the exec family of calls開始有:

的功能exec類的替代 與 新的進程映像當前的進程映像。

不完全確定你想完成什麼,但它看起來像exec不是解決方案。如果你想讓你的第一個程序保持活着,你需要fork。您的初始程序是否對tail -f的輸出做了些什麼?

+0

謝謝。是的,我閱讀了手冊頁,並讓我發表了這個問題。我希望這條尾巴能夠在後臺運行,並繼續使用我的程序進行操作。任何其他庫函數我可以使用? – hari

+0

我相信'fork()'仍然會做你想做的事情 - 一旦你調用它,繼續在你的父進程中執行你的程序,並在子進程中調用'execl()'。以我的答案爲例。 –

3

execl()將取代調用過程,所以一旦你調用它,你的調用程序就不會再存在了。

爲了解決這個問題,您可以在致電fork()後致電execl()。叉子把你的程序分成兩部分(一個父母和一個孩子),你可以檢查哪個是子進程,哪個是父進程。 This example解釋瞭如何使用分叉 - 在第二個示例中,您將把execl()調用放入子流程部分。

+0

感謝這個例子。 – hari

+0

我懷疑很多人需要我需要的行爲。是否應該沒有一個調用fork()和execl()的API?只是一個想法。 – hari

1

如果你的父程序想從tail捕獲輸出,你應該看看popen()函數。這將啓動尾部進程,輸出可以從它返回的FILE *中讀取。

如果你的父程序沒有興趣捕獲輸出,那麼你會想用fork()來創建一個子進程,然後調用execl()。子進程映像將被尾部替換,並且您的父進程將繼續。