1.守护进程: 运行时间较长,一般在后台运行,关闭了启动它的终端,也不会结束该程序。
打开一个终端就和内核建立了一个会话。
2.会话首进程 : 在该会话中运行的第一个进程叫做会话首进程,用会话首进程的pid来标识会话。直到终端退出,会话结束。
3.组长进程 :进程的pid和组号相同。
守护进程编程流程:
1.fork()产生子进程,退出父进程;
2.在当前进程中执行setsid();//创建一个新的会话,当前进程脱离原来的会话;
3.fork()产生子进程,退出父进程;(可有可无)
4.chdir("/") 修改工作目录到根目录;
5.umask(0)设置掩码;
6.close()关闭所有文件描述符;
具体代码实现如下:
#include<stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <sys/types.h>
int main(){
pid_t pid = fork();
if(pid != 0){
exit(0);
}
setsid();
pid = fork();
if(pid != 0){
exit(0);
}
chdir("/");
umask(0);
int i =0;
for(;i<getdtablesize();i++){
close(i);
}
while(1){
FILE* fp = fopen("/tmp/testd.log","a");
if(fp == NULL){
break;
}
time_t tv;
time(&tv);
fprintf(fp,"CURR time:%s",asctime(localtime(&tv)));
fclose(fp);
sleep(5);
}