【发布时间】:2013-07-10 01:29:57
【问题描述】:
我有一个 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 首先启动了它。
有什么办法可以做到吗?
我在 Linux 上用 C++ 编写。
【问题讨论】:
-
我不认为使用系统是个好主意....
-
为什么不使用系统是个好主意?除了明显的安全问题?我在一个非常受控的环境中的嵌入式系统上执行此操作,我不担心错误的系统调用。还有其他我应该警惕的原因吗?
-
@zachd1_618 用于安全问题,如果 /bin/sh 不存在,您将遇到某种问题
-
@Alexis 感谢您提供的信息。以后我会小心的,但在这种情况下,系统是封闭和受控的,安全不是问题。
标签: c++ linux fork parent-child spawn