- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实现守护进程的完整实例
实现守护进程的完整实例(每隔10s在/tmp/dameon.log中写入一句话):
#includestdio.h
#includestdlib.h
#includestring.h
#includefcntl.h
#includesys/types.h
#includeunistd.h
#includesys/wait.h
#include signal.h
#define MAXFILE 65535
volatile sig_atomic_t _running = 1;
int main()
{
pid_t pc;
int i,fd,len;
char *buf=this is a Dameon\n;
len = strlen(buf);
pc = fork(); //第一步
if(pc0){
printf(error fork\n);
exit(1);
}
else if(PC0)
exit(0);
setsid(); //第二步
chdir(/); //第三步
umask(0); //第四步
for(i=0;iMAXFILE;i++) //第五步
close(i);
signal(SIGTERM, sigterm_handler);
while( _running ){
if((fd=open(/tmp/dameon.log,O_CREAT|O_WRONLY|O_APPEND,0600))0){
perror(open);
exit(1);
}
write(fd,buf,len);
close(fd);
usleep(10*1000); //10毫秒
}
}
void sigterm_handler(int arg)
{
_running = 0;
}单用户模式就是系统处于最原始的状态,所有网络服务都未启动,文件系统都没有mount,只有最基础的系统module被加载,然后由kernel启动进入命令行状态。这样的状态我们称之为单用户模式。
守护进程
求助编辑百科名片
在linux或者unix操作系统中在系统的引导的时候会开启很多服务,这些服务就叫做守护进程。为了增加灵活性,root可以选择系统开启的模式,这些模式叫做运行级别,每一种运行级别以一定的方式配置系统。 守护进程是脱离于终端并且在后台运行的进程。守护进程脱离于终端是为了避免进程在执行过程中的信息在任何终端上显示并且进程也不会被任何终端所产生的终端信息所打断。
目录
守护进程简介
创建守护进程创建子进程,父进程退出
在子进程中创建新会话
改变当前目录为根目录
重设文件权限掩码
关闭文件描述符
守护进程退出处理
守护进程简介
创建守护进程创建子进程,父进程退出
在子进程中创建新会话
改变当前目录为根目录
重设文件权限掩码
关闭文件描述符
守护进程退出处理
展开
编辑本段守护进程简介
守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程常常在系统引导装入时启动,在系统关闭时终止。Linux系统有很多守护进程,大多数服务都是通过守护进程实现的,同时,守护进程还能完成许多系统任务,例如,作业规划进程crond、打印进程lqd等(这里的结尾字母d就是Daemon的意思)。 由于在Linux中,每一个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端就称为这些进程的控制终端,当控制终端被关闭时,相应的进程都会自动关闭。但是守护进程却能够突破这种限制,它从被执行开始运转,直到整个系统关闭时才退出。如果想让某个进程不因为用户或终端或其他变化而受到影响,那么就必须把这个进程变成一个守护进程。
编辑本段创建守护进程
创建子进程,父进程退出
这是编写守护进程的第一步。由于守护进程是脱离控制终端的,因此,完成第一步后就会在Shell终端里造成一程序已经运行完毕的假象。之后的所有工作都在子进程中完成,而用户在Shell终端里则可以执行其他命令,从而在形式上做到了与控制终端的脱离。 在Linux中父进程先于子进程退出会造成子进程成为孤儿进程,而每当系统发现一个孤儿进程时,就会自动由1号进程(init)收养它,这样,原先的子进程就会变成init进程的子进程。
在子进程中创建新会话
这个步骤是创建守护进程中最重要的一步,虽然它的实现非常简单,但它的意义却
原创力文档


文档评论(0)