#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
int main()
{
pid_t pid;
int i;
char *buf = "I am a daemon!\n";
int flag = 1;
int fd;
/* 1.创建子进程 */
pid= fork();
if(pid < 0)
{
printf("fork error!\n");
exit(0);
}
else if (pid > 0)
exit(0);
/* 2.脱离控制终端 */
setsid();
/* 3.1 改变工作目录 */
chdir("/");
/* 3.2清除掩码 */
umask(0);
/* 3.3关闭打开的文件 */
for(i=0; i<65535; i++)
close(i);
/* 4.守护进程的实际工作 */
while(1)
{
if((flag == 1) && (fd = open("/tmp/daemon.log",O_CREAT|O_WRONLY|O_APPEND,0600)) < 0)
{
printf("open file error\n");
flag = 0;
exit(1);
}
write(fd, buf, strlen(buf));
close(fd);
sleep(1);
}
return 0;
}
温馨提醒:上述的程序代码中的注释步骤就是守护进程的设计步骤,若有需要只用自己改掉第4步
下面的代码。