我有一个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
为什么不使用系统一个好主意?除了明显的安全问题?我在一个非常受控制的环境中在嵌入式系统上执行此操作,并且我不担心错误的系统调用。我应该警惕另一个原因吗? –