创建守护进程 daemon
2012-12-26 15:09
162 查看
在后台一直运行的进程为守护进程。
建立守护进程的5个步骤:
1,fork()创建子进程后,父进程立即退出。这样子进程就变为孤儿进程。
2,调用setsid():是创建的进程脱离控制终端,同时创建新的 进程组,使得新创建的进程为该进程组的首进程。
3,再用fork(),产生 的子进程将继承父进程的当前工作目录。注:如果当前进程没结束,其工作目录就不能被卸载,为了避免这种情况,需将工作目录切换下,chdir(“/home/”)。
4,关闭文件描述符。新的子进程继承了父进程打开的文件描述符,子进程不用这些,需要将其关闭。
5,守护进程创建了一些临时文件,umask()将这些屏蔽。
用scribes建立daemon.c文件:
#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
#include<sys/param.h>
#include<sys/types.h>
#include<sys/stat.h>
#include <stdio.h>
#include <time.h>
void init_daemon(void) //守护进程初始化函数
{
int pid;
int i;
if(pid=fork()) //步骤1
exit(0); //是父进程,结束父进程
else if(pid< 0)
exit(1); //fork失败,退出
setsid(); //步骤2
if(pid=fork()) //步骤3
exit(0); //是第一子进程,结束第一子进程
else if(pid< 0)
exit(1); //fork失败,退出
chdir("/tmp"); //改变工作目录到/tmp
for(i=0;i< NOFILE;++i) //关闭打开的文件描述符 步骤4
close(i);
umask(0); //重设文件创建掩模 //步骤5
return;
}
void init_daemon(void);
int main(int argc,char* argv[])
{
FILE *fp;
time_t t;
init_daemon(); //初始化为Daemon
while(1) //每隔一分钟向test.log报告运行状态
{
sleep(60); //睡眠一分钟
if((fp=fopen("test.log","a")) >=0)
{
t=time(0);
fprintf(fp,"I'm here at %s\n",asctime(localtime(&t)));
fclose(fp);
}
}
return 0;
}
输出:
建立守护进程的5个步骤:
1,fork()创建子进程后,父进程立即退出。这样子进程就变为孤儿进程。
2,调用setsid():是创建的进程脱离控制终端,同时创建新的 进程组,使得新创建的进程为该进程组的首进程。
3,再用fork(),产生 的子进程将继承父进程的当前工作目录。注:如果当前进程没结束,其工作目录就不能被卸载,为了避免这种情况,需将工作目录切换下,chdir(“/home/”)。
4,关闭文件描述符。新的子进程继承了父进程打开的文件描述符,子进程不用这些,需要将其关闭。
5,守护进程创建了一些临时文件,umask()将这些屏蔽。
用scribes建立daemon.c文件:
#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
#include<sys/param.h>
#include<sys/types.h>
#include<sys/stat.h>
#include <stdio.h>
#include <time.h>
void init_daemon(void) //守护进程初始化函数
{
int pid;
int i;
if(pid=fork()) //步骤1
exit(0); //是父进程,结束父进程
else if(pid< 0)
exit(1); //fork失败,退出
setsid(); //步骤2
if(pid=fork()) //步骤3
exit(0); //是第一子进程,结束第一子进程
else if(pid< 0)
exit(1); //fork失败,退出
chdir("/tmp"); //改变工作目录到/tmp
for(i=0;i< NOFILE;++i) //关闭打开的文件描述符 步骤4
close(i);
umask(0); //重设文件创建掩模 //步骤5
return;
}
void init_daemon(void);
int main(int argc,char* argv[])
{
FILE *fp;
time_t t;
init_daemon(); //初始化为Daemon
while(1) //每隔一分钟向test.log报告运行状态
{
sleep(60); //睡眠一分钟
if((fp=fopen("test.log","a")) >=0)
{
t=time(0);
fprintf(fp,"I'm here at %s\n",asctime(localtime(&t)));
fclose(fp);
}
}
return 0;
}
输出:
相关文章推荐
- 【Linux编程】守护进程(daemon)详解与创建
- 【Linux】守护进程(daemon)创建及详解
- linux系统编程之进程(八):守护进程详解及创建,daemon()使用
- linux系统编程之进程(八):守护进程详解及创建,daemon()使用
- 用C语言在Linux系统下创建守护进程(Daemon)
- 守护进程详解及创建,daemon()使用
- 守护进程详解及创建,daemon()使用
- 守护进程daemon的创建和使用
- 守护进程daemon的创建和使用
- Linux C创建守护进程(daemon)及终端相关概念
- linux守护进程详解及创建,daemon()使用
- 在创建守护进程时优先选用系统调用daemon()
- 守护进程daemon的创建和使用
- 创建守护进程(Daemon)
- Linux 创建守护进程(daemon)
- linux 守护进程(daemon)的创建方法
- linux创建守护进程--Daemon函数
- linux下创建守护进程(daemon process)
- linux系统编程之进程(八):守护进程详解及创建,daemon()使用
- Linux daemon守护进程的创建