我有一個C++程序,充當其他人的看門狗。如果它檢測到一個進程不再運行,它將通過system
重新啓動它。問題是,如果我殺了看門狗進程,它啓動的任何進程也會死掉。如何生成不會與父母一起死亡的子進程?
void* ProcessWatchdog::worker(void* arg)
{
//Check if process is running
if(!processRunning)
system("processName /path/to/processConfig.xml &");
}
新的子進程正常啓動,運行沒有任何問題。但是當父母(現在這個ProcessWatchdog
過程)死亡時,孩子也死了。我如何產生一個完全獨立於父代的子進程?
我試過使用pclose
和popen
,運行啓動進程的shell腳本和其他一些策略,但都無濟於事。我忽略了子進程中的SIGHUP
信號,但它們仍然死亡。
所以理想情況下,我想告訴系統啓動一個完全獨立於父系的進程。我希望孩子的trace
以孩子結束,並且系統不知道ProcessWatchdog
首先啓動它。
有沒有一種方法可以做到這一點?
我正在用C++寫在Linux上。
[使子系統產生的子進程()繼續運行後,父母獲取殺死信號和退出]可能的重複(http://stackoverflow.com/questions/12945189/make-child-進程產生與系統保持運行後父母得到殺死sig) –
我不認爲使用系統是一個好主意.... – Alexis
爲什麼不使用系統一個好主意?除了明顯的安全問題?我在一個非常受控制的環境中在嵌入式系統上執行此操作,並且我不擔心錯誤的系統調用。我應該警惕另一個原因嗎? –