- 论坛徽章:
- 1
|
创建守护进程时,通常有几个步骤,其中第一个步骤是:创建子进程,父进程退出。
本人感到疑惑的是,创建守护进程无非就是为了脱离进程组,脱离会话组,可以不必通过终端来启动,但是从创建守护进程的步骤来看,好像也是须要先将父进程启动,然后才能启动子进程,即守护进程。
下面是实现守护进程的一个完整实例:
该实例首先建立了一个守护进程,然后让该守护进程每隔10s在/tmp/dameon.log 中写入一句话。
/*dameon.c创建守护进程实例*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<fcntl.h>
#include<sys/types.h>
#include<unistd.h>
#include<sys/wait.h>
#define MAXFILE 65535
int main()
{
pid_t pc;
int i,fd,len;
char *buf="This is a Dameon\n";
len =strlen(buf);
pc=fork(); //创建守护进程的第一步,即,创建子进程,父进程退出
if(pc<0){
printf("error fork\n");
exit(1);
}
else if(pc>0)
exit(0);
/*第二步*/
setsid();
/*第三步*/
chdir("/");
/*第四步*/
umask(0);
for(i=0;i<MAXFILE;i++)
/*第五步*/
close(i);
/*这时创建完守护进程,以下开始正式进入守护进程工作*/
while(1){
if((fd=open("/tmp/dameon.log",O_CREAT|O_WRONLY|O_APPEND,0600))<0){
perror("open");exit(1);
}
write(fd, buf, len+1);
close(fd);
sleep(10);
}
}
将以上程序编译后,同样需要运行编译得到的可执行文件,才能将守护进程运行起来。那这样,创建的守护进程不是没什么意义了吗? |
|