服务端开发-创建后台进程

  • Post author:
  • Post category:其他


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 版权协议,转载请附上原文出处链接和本声明。