当前位置: 技术问答>linux和unix
如何实现核心守护进程!!!!!!!!!!!
来源: 互联网 发布时间:2015-08-10
本文导语: 通常所写的都是用户空间的守护进程,即这样的守护进程有可能会被换进或换出;而核心空间的守护进程是驻留于核心物理内存的,即这样的守护进程和内核一样是不换页的,其运行速率自然要高. 请问如何实现核心空间...
通常所写的都是用户空间的守护进程,即这样的守护进程有可能会被换进或换出;而核心空间的守护进程是驻留于核心物理内存的,即这样的守护进程和内核一样是不换页的,其运行速率自然要高.
请问如何实现核心空间的守护进程,如果用写内核模块的方法实现有可能吗,要怎么写??
问题在于在內核空间不能象在用户空间一样调用fork();系统调用,可以吗?!
请高手指点!
谢谢!
请问如何实现核心空间的守护进程,如果用写内核模块的方法实现有可能吗,要怎么写??
问题在于在內核空间不能象在用户空间一样调用fork();系统调用,可以吗?!
请高手指点!
谢谢!
|
除非你实现为内核模块
不然怎么能不被换出去呢?
不然怎么能不被换出去呢?
|
kernel thread
|
fork childen process。kill father process
|
请教各位,我实现守护进程 -- 利用中的void daemon_init(const char *pname, int facility)函数。进程启动要么在执行fork时退出,要么是成功执行daemon_init后,在以后某处停止。这是为什么?
代码如下(我稍作了修改):
#include
#define MAXFD 64
//extern int daemon_proc; /* defined in error.c */
#ifndef WIN32
void daemon_init(const char *pname, int facility)
{
int i;
pid_t pid;
if ( (pid = fork()) != 0)
exit(0); /* parent terminates */
/* 41st child continues */
setsid(); /* become session leader */
signal(SIGHUP, SIG_IGN);
if ( (pid = fork()) != 0)
exit(0); /* 1st child terminates */
/* 42nd child continues */
// daemon_proc = 1; /* for our err_XXX() functions */
chdir("/"); /* change working directory */
umask(0); /* clear our file mode creation mask */
for (i = 0; i
代码如下(我稍作了修改):
#include
#define MAXFD 64
//extern int daemon_proc; /* defined in error.c */
#ifndef WIN32
void daemon_init(const char *pname, int facility)
{
int i;
pid_t pid;
if ( (pid = fork()) != 0)
exit(0); /* parent terminates */
/* 41st child continues */
setsid(); /* become session leader */
signal(SIGHUP, SIG_IGN);
if ( (pid = fork()) != 0)
exit(0); /* 1st child terminates */
/* 42nd child continues */
// daemon_proc = 1; /* for our err_XXX() functions */
chdir("/"); /* change working directory */
umask(0); /* clear our file mode creation mask */
for (i = 0; i