注:Linux下可以直接调用damon函数来实现daemon进程,没必要重新实现,理解其原理即可。
在Linux中专门提供了一个函数来完成这个daemon化的过程,这个函数的原型如下
int daemon ( int __nochdir, int __noclose) ;
如果__nochdir的值为0,则将切换工作目录为根目录;如果__noclose为0,则将标准输入,输出和标准错误都重定向到/dev /null。
经过这个函数调用后的程序将运行在后台,成为一个daemon程序,而linux下大多的服务都是以此方式运行的。
我们来看一个简单的例子。例如编写例子程序test.c
#include <unistd.h> #include <stdio.h> int do_sth( ) { //Add what u want return 0 ; } int main( ) { daemon( 0 , 0 ) ; while ( 1 ) { do_sth( ) ; sleep( 1 ) ; } }
编译并运行
[ leconte@ localhost daemon] $ gcc -o test test.c [ leconte@ localhost daemon] $ ./ test
程序进入了后台,通过ps查看进程情况,可以看到进程的父进程id为1,即init进程
用lsof查看test进程所打开的文件,可以看到文件描述符0,1,2都被重定向到/dev/null
并且能够看到,进程的当前工作目录(cwd)为根目录/,daemon函数已经帮我们完成了daemon化的过程,接下来我们只需要关注于程序功能的实现了。