守護進程有如下幾個概念
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);
}
}