日期:2014-05-16  浏览次数:20687 次

守护进程?
在 linux 下如何实现如下功能:监视一个进程的运行状态,如果该进程退出了,则重新启动该进程?
看到有资料说好像是用到什么 守护进程 ?
搜到一段代码,不知道是什么意思,麻烦解释一下
C/C++ code
 
void init_daemon( void )
{
int pid;
int i;

if( pid = fork() )
exit( 0 );
        else if( pid < 0 )
exit( 1 );

        setsid();

if( pid = fork() )
exit( 0 );
else if( pid < 0 )
exit( 1 );

for( i = 0; i < NOFILE; i++ )
close( i );

chdir( "/tmp" );
umask( 0 );
}

int main( void )
{
FILE *fp;
time_t tt;

init_daemon();

while( 1 ) {
sleep( 5 );
if( fp = fopen("test.log", a) ) {
tt = time( 0 );
fprintf( fp, "I'm here at %s\n", asctime(localtime(&tt)) );
fclose( fp );
}
}
}


------解决方案--------------------
这段代码是让进程脱离终端在后台执行。
守护进程是指一个在后台执行的程序,它的主要任务是监控另一个(后台或者前台)程序是否在(正确)执行,如果发现目标出现错误(推出或者某个功能执行错误)时,(关闭目标)重新启动目标程序,确保正常服务。
在设计服务程序的时候不要依赖于守护进程,而是需要更多的执行自检查、自修复等。
------解决方案--------------------
可以通过popen()调用
假定你的进程名称是A
FILE *fp = popen("ps -ef|grep A|grep -v grep", "r");
然后读取fp,可以获取命令的输出结果

重启时system("A");