Linux中的守护进程
前言
什么是守护进程:
- 在后台运行,与任何终端无关。
- 周期性的执行某种任务或等待处理特定事件。
守护进程的创建
先与终端脱离关系,让子进程变为孤儿进程。
子进程创建一个新的会话,并成为新的会话组长。
守护进程一直在后天运行,其工作目录不能被卸载,重新设定当前目录(假如是临时目录,容易出现问题,所以更改目录,路径不限定)
改变文件掩码,防止设置权限时受影响
关闭所有从父进程继承的打开文件
最后查看编写的程序是否为后台程序,关闭终端后是否会影响进程。
只能用kill杀死进程。
创建一个守护进程,将系统时间保存到log文件中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <time.h> int main(){ pid_t pid; pid = fork(); if(pid<0){ perror("fork"); return -1; }else if(pid>0){ exit(0); } pid = setsid(); if(pid==-1){ perror("setsid"); return -1; } chdir("/"); umask(0); int i; for(i = 0;i<getdtablesize();i++){ close(i); } FILE *fp; time_t ctm; fp = fopen("1.log","w"); while(1){ ctm = time(NULL); fputs(ctime(&ctm),fp); fflush(fp); sleep(1); } }
|