守护进程demon.c
1 #include <stdio.h> 2 #include <unistd.h> 3 #include <errno.h> 4 #include <time.h> 5 #include <stdlib.h> 6 7 int main() 8 { 9 pid_t pid; 10 pid = fork(); 11 if (pid <0) 12 { 13 perror("fail to fork"); 14 exit(1); 15 } 16 if (pid == 0) 17 { 18 setsid();//在子进程中创建新会话 19 chdir("/tmp");//改变目录 20 umask(0);//重设文件权限掩码 21 int i; 22 for (i = 0;i<getdtablesize();i++) 23 { 24 close(i);//关闭所有打开的文件描述符 25 } 26 FILE *fp_w; 27 time_t t; 28 fp_w = fopen("time.log","a"); 29 if (fp_w == NULL) 30 { 31 perror("fail to fopen fp_w"); 32 exit(1);
33 }
34
35 while (1) 36 { 37 time(&t);//获取系统时间的秒数 38 fprintf(fp_w,"%s\n",ctime(&t));//将秒数转化为字符 39 sleep(1); 40 fflush(fp_w);//刷新 41 } 42 } 43 else 44 { 45 exit(0); 46 } 47 return 0; 48 }
gcc编译之后 用ps ajx命令查看一下进程