守护进程有如下几个概念
1 创建一个新的子进程
2 设置允许当前进程创建文件或者目录最大可操作的权限
3 设置新的进程组id
4 把根目录切换的指定的目录
5 关闭标准输入和输出
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/stat.h>
int daemon_it(){
pid_t pid,sid;
//创建一个子进程
pid = fork();
if (pid < 0){
exit(EXIT_FAILURE);
}
if (pid > 0){
exit(EXIT_SUCCESS);
}
//设置文件掩码,最大权限
umask(0);
//创建一个新的会话id
sid = setsid();
if (sid < 0){
exit(EXIT_FAILURE);
}
//切换到根目录
if (chdir("/") < 0) {
exit(EXIT_FAILURE);
}
//关闭标准输出,输入,error
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
return 0;
}
void test_daemon(){
puts("test daemon");
daemon_it();
while (1) {
puts("waiting...\n");
sleep(1);
}
}