Unix/Linux中的守护进程(Daemon)类似于Windows中的后台服务进程,一直在后台长时间运行的进程。它通常在系统启动后就运行,没有控制终端,也无法和前台的用户交互,在系统关闭时才结束。Daemon程序一般都作为服务程序使用。
man手册对daemon函数的描述
daemon()函数用于希望脱离控制终端并在后台运行的程序
#include <unistd.h>
int daemon(int nochdir, int noclose);
如果nochdir=0,则将进程的当前工作目录更改为根目录(“/”);nochdir=1,则当前工作目录不变
如果noclose=0,则将标准输入、输出、出错重定向到/dev/null;否则,不会对这些文件描述符进行任何的更改
返回值:daemon函数内部会执行 fork, 如果 fork 成功, 父进程会调用 _exit 退出. 执行成功返回 0;发生错误时候将返回 -1,;errno 的设置依赖 fork(), setsid(), daemon() 源码.
测试代码
#include <stdio.h>
#include <errno.h>
#include <syslog.h>
#include <unistd.h>
#include <libgen.h>
#include <string.h>
int main(int argc, char **argv)
{
if(daemon(1,1) < 0)//可以自己改改参数试一试
{
printf("Program daemon() failure: %s\n", strerror(errno));
return -1;
}
printf("test start!!!!!!!!!!!!!\n");
while(1)
{
printf("program is running!!!!!!!!!!!!!!!!\n");
sleep(5);
}
return 0;
}
ctrl+c不能关掉该进程,可以查看进程号,将其杀死
ps aux | grep ./daemon
kill <进程号>