我想在Unix中編寫一個守護進程。我理解如何使守護進程運行起來。現在我希望守護進程在shell中輸入命令時作出響應,如果它們是針對守護進程的。編寫一個unix守護進程
例如:
讓我們假設守護程序的名稱是 「mydaemon」
在終端1 I型mydaemon XXX。 在終端2中輸入mydaemon yyy。
「mydaemon」應該能夠接收參數「xxx」和「yyy」。
我想在Unix中編寫一個守護進程。我理解如何使守護進程運行起來。現在我希望守護進程在shell中輸入命令時作出響應,如果它們是針對守護進程的。編寫一個unix守護進程
例如:
讓我們假設守護程序的名稱是 「mydaemon」
在終端1 I型mydaemon XXX。 在終端2中輸入mydaemon yyy。
「mydaemon」應該能夠接收參數「xxx」和「yyy」。
如果我正確解釋您的問題,那麼您必須將其作爲應用程序級構造執行此操作。也就是說,這是您的程序特定於您自己的代碼。
我會採取的方法是寫「mydaemon」的想法,它是一個包裝:它檢查進程表或pid文件,看看「mydaemon」是否已經在運行。如果沒有,那麼fork/exec你的新守護進程。如果是這樣,那麼將參數發送給它。
對於「發送參數給它」,我會使用命名管道,如下所述:What are named pipes?實質上,您可以將命名管道想象爲「stdin」,除非它們顯示爲文件該系統,所以你可以在運行「mydaemon」中打開它們並檢查它們的輸入。
最後,應該注意的是,所有這些check-if-running-send-to-pipe的東西都可以在守護程序中使用* nix OS的API來完成,或者可以在一個腳本通過使用例如'ps','echo'等...
謝謝,我在這裏還有一個問題,可以說我想返回新的請求「mydaemon yyy」,表示您的請求已被接受,可以在指定的管道中寫入內容並在另一端讀取? – user1801900
我不認爲一個管道可以做到這一點 - 你可以使用多個管道 - 但你可以通過使用Unix套接字http://beej.us/guide/bgipc/output/html/multipage/unixsock更好地服務。 html - 尤其是,查看描述'socketpair()'的文章結尾。使用Unix套接字更像是使用完整的網絡套接字,這可能是一個優勢 - 將守護進程移植爲聯網服務幾乎是微不足道的 - 而且(如果你做得對),你的守護進程和守護進程之間的全雙向異步通信任何其他程序。 – Matt
你的意思是你希望能夠在第一次啓動它時將命令傳遞給守護進程,或者你的意思是_after_你開始了一個守護進程,它是運行,連續調用「mydaemon」發送指令到已經運行的進程? – Matt
我的意思是連續調用「mydaemon」向已經運行的進程發送指令。 – user1801900