linux 下的守护进程,代码从网上找的,记录下来: #include <unistd.h> #include <signal.h> #include <sys/param.h> #include <sys/types.h> #include <sys/stat.h> #include <stdio.h> #include <time.h> void init_daemon( void ) { int pid; int i; if( pid = fork() ) exit( 0 ); /* 结束父进程 */ else if( pid < 0 ) exit( 1 ); /* fork() 失败,退出 */ /* 第一子进程,后台继续执行 */ setsid(); /* 第一子进程成为新的会话组长和进程组长,并与控制终端分离 */ if( pid = fork() ) exit( 0 ); /* 是第一子进程,结束第一子进程 */ else if( pid < 0 ) exit( 1 ); /* fork() 失败,退出 */ /* 第二子进程,继续执行,第二子进程不再是会话组长 */ for( i = 0; i < NOFILE; i++ ) close( i ); chdir( "/tmp" ); umask( 0 ); } int main( void ) { FILE *fp; char buf[256]; int find; init_daemon(); while( 1 ) { memset( buf, 0, sizeof(char) * 256 ); find = 0; if( fp = popen("ps -ef", "r") ) { while( fgets(buf, 256, fp) ) { if( strstr(buf, "/home/kusey/temp/xxxx") ) { find = 1; break; } memset( buf, 0, sizeof(char) * 256 ); } if( 0 == find ) system( "/home/kusey/temp/xxxx" ); else sleep( 10 ); pclose( fp ); } } }