标签:处理 显示 argv 示例 输入流 margin 用户 子进程 perror
1.创建子进程,父进程退出
2.摆脱当前会话,创建新的会话组,子进程成为组长
3.关闭文件描述符号
4.设置文件掩码
5.设置工作目录
注意:有时还要处理SIGCHLD信号signal(SIGCHLD, SIG_IGN);防止僵尸进程(zombie))
下面就可以添加任何你要daemon做的事情
示例:
1 #include <stdio.h> 2 #include <string.h> 3 #include <string.h> 4 #include <stdlib.h> 5 #include <sys/types.h> 6 #include <sys/stat.h> 7 #include <sys/wait.h> 8 9 10 int main(int argc, const char *argv[]) 11 { 12 int ret; 13 int i; 14 char * buf = "hello world"; 15 pid_t pid; 16 FILE * fp; 17 18 pid = fork(); 19 if(pid < 0){ 20 perror("fork"); 21 return -1; 22 } 23 else if(pid > 0){ 24 exit(0); //父进程退出 25 } 26 27 28 setsid(); //让子进程成组长 并创建新的会话 并脱离当前终端 29 30 31 //关闭标准输入流 32 for(i=0;i<3;i++){ 33 close(i); 34 } 35 36 //更改工作目录至根目录 (可选) 37 chdir("/"); 38 39 //设置文件掩码 (可选) 40 umask(0); 41 42 43 //守护进程间隔一段时间向文件写入内容 44 while(1){ 45 46 fp = fopen("daemon.log","a+"); 47 if(!fp){ 48 return -1; 49 } 50 51 ret = fwrite(buf,1,strlen(buf),fp); 52 if(ret < 0){ 53 return -1; 54 } 55 56 fclose(fp); 57 58 sleep(5); 59 } 60 61 return 0; 62 }
标签:处理 显示 argv 示例 输入流 margin 用户 子进程 perror
原文地址:http://www.cnblogs.com/general0878/p/7221203.html