ctrl+c不会影响后台进程,可以用ps查看后台进程
1.FORK 方式
1.fork 一个子进程,父进程退出,自进程成为孤儿进程,被init进程接管。
2.调用setsid建立新的进程会话。
3.将当前工作目录切换到根目录
4.将标准输入,输出,出错重定向到/dev/null
代码如下:
#include <iostream>
#include <unistd.h>
#include <stdlib.h>
void daemonize()
{
pid_t pid;
if((pid = fork()) < 0)
{
cout<< "error opened!"<<endl;
}
else
{
if(pid != 0)
{
// 主进程退出
exit(0);
}
}
setsid ();
// 切换工作目录
if(chdir("/") <0)
{
cout<<"error"<<endl;
exit(1);
}
fd= open("dev/null",O_RDWR);
// 将标注输入输出标准错误重定向到/dev/null,不在控制台显示了
dup2(fd,STDIN_FILENO);
dup2(fd,STDOUT_FILENO);
dup2(fd,STRERR_FILENO);
}
int main(int arc ,char *argv[])
{
daemonize();
while(1)
{
sleep(1);
}
}
2.Daemon API方式
#include <iostream>
#include <unistd.h>
#include <stdlib.h>
int mian(int argc,char * argv[])
{
//一个接口完成方式1的所有功能
if(daemon(0,0) == -1)
{
std::cout<<error<<std::endl;
exit(-1);
}
while(1)
{
sleep(1);
}
}
版权声明:本文为qq_43559669原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。