簡體   English   中英

重啟linux守護進程

[英]Restarting a linux daemon

我有用C ++編寫的Linux守護進程,當通過網絡通過其控制台從用戶通過“重新啟動”命令給出時,它應該重新啟動。 這可能嗎? 我使用/etc/init.d腳本。 如何對其進行編程以重新啟動? 我是否應該啟動一個延遲很長(一分鍾)的新進程,然后再次觸發shell腳本? 問題是守護進程可能需要很長時間才能關閉,在最壞的情況下可能需要超過一分鍾。

應用程序基本上有三種重啟方式:

  1. 當告訴應用程序重新啟動時,它會進行適當的清理,釋放它已分配的所有資源,然后重新初始化,就像它從頭開始一樣。

  2. 分叉一個新進程,其中新的子進程執行自己並且父進程正常退出。

  3. 守護進程實際上只是一個包裝器應用程序,就像一個init-script。 它會分配一個運行實際應用程序的新進程,而父進程只是等待它退出。 如果子進程(和實際應用程序)返回一個特殊的退出代碼,則意味着它應該重新啟動,以便forks / execs重新進行。

注意,第2點和第3點基本相同。

按兩個步驟分解重啟,停止並啟動。 如果你的程序需要時間停止,它應該在stop函數中處理,我不能評論細節,因為我不知道你的用例,但我想象監視進程以檢查它是否被終止將是一個優雅的停止的方式

做你需要做的任何關閉/清理,然后調用:

execl( argv[0], argv, reinterpret_cast< char* >( 0 ) );

就像fork()和exec()一樣,但是跳過fork。 exec將用自己的新副本替換當前進程。 比照 http://linux.die.net/man/3/exec

你的init腳本應該殺死你的守護進程並重新啟動它。 不要嘗試從守護程序重新啟動守護程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM