他のプログラムのウォッチドッグとして機能する C++ プログラムがあります。プロセスが実行されていないことを検出すると、 を介してプロセスを再起動しsystem
ます。問題は、ウォッチドッグ プロセスを強制終了すると、それが起動したプロセスも停止することです。
void* ProcessWatchdog::worker(void* arg)
{
//Check if process is running
if( !processRunning )
system("processName /path/to/processConfig.xml &");
}
新しい子プロセスが正しく開始され、問題なく実行されます。しかし、親 (現在はこのProcessWatchdog
プロセス) が死ぬと、子も死にます。親から完全に独立した子プロセスを生成するにはどうすればよいですか?
pclose
やpopen
、プロセスを開始するシェル スクリプトの実行、およびその他のいくつかの戦術を使用してみましたが、役に立ちませんでした。子プロセスのシグナルを無視してSIGHUP
いますが、それでも死んでしまいます。
理想的には、親から完全に独立したプロセスを開始するようにシステムに指示したいと思います。私は子供がtrace
子供で終わること、そしてそれ/システムがProcessWatchdog
最初にそれを始めたことを知らないことを望んでいます.
これを行う方法はありますか?
Linux の C++ でこれを書いています。