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

【求助】system创建一个脱离线程的进程
看下面的代码说明,大家给个方法吧,谢谢了

//假如我线程,或者这个主进程退出了,我还想让system("/opt/scal")这个继续工作,应该怎么弄呢?

void *DaemonThread(void *pArg)
{
//线程函数中 调用了
    system("/opt/scal");

}


int main()
{
    //创建一个线程
    pthread_create(,DaemonThread,)//参数没写全
    //假如我线程,或者这个主进程退出了,我还想让system("/opt/scal")这个继续工作,应该怎么弄呢?

}


------解决方案--------------------
创建一个守护进程啊
int Daemon()
{
struct sigaction act;

if(fork()!=0) exit(1);
 
/* 创建一个新的会议组 */  
if(setsid()<0)exit(1);
 
/* 忽略信号SIGHUP */  
act.sa_handler=SIG_IGN;  
sigemptyset(&act.sa_mask);
act.sa_flags=0;  
if(sigaction(SIGHUP,&act,NULL)==-1)exit(1);  
 
/* 子进程退出,孙进程没有控制终端了 */  
if(fork()!=0) exit(1);

if(chdir("/")==-1)exit(1);

return 0;
}

------解决方案--------------------
fork+daemon
------解决方案--------------------
输出还和当前终端绑定着,当前终端关闭后重新开一个就看不到输出了
或者system里面将输出重定向到/dev/null