C语言守护进程学习笔记.doc

C语言守护进程学习笔记.doc

ID:57687288

大小:15.50 KB

页数:2页

时间:2020-09-01

C语言守护进程学习笔记.doc_第1页
C语言守护进程学习笔记.doc_第2页
资源描述:

《C语言守护进程学习笔记.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、/*--------------------------守护进程--精灵进程--Daemon进程初学------------------------------------守护进程是后台服务进程,Linux的部分的服务都是靠他来支持的,为了它不受用户或者终端等其他变化的影响,就要想办法让守护进程低调点创建流程:1.使守护进程忽略信号影响(父进程退出时会给子进程发SIGHCP的信号,对应子进程退出发出SIGCHLD(child)信号)signal(SIGUP,SIG_IGN)(signalup,signalignore)原型sighandler_tsignal(intsignum,sig

2、handler_thandler)2.使守护进程脱离终端控制,不受终端影响。(这里也同时摆脱了原会话和会话组)A用户一登录一个会话就开始了,假设这个会话组有个领头进程PBP---第一次fork---得到子进程P',顺便(exit(0))结束掉领头P的进程<有了第1步骤,父进程退出使不造成影响>,让P‘成为孤儿进程,造成程序已经完毕的假象,摆脱终端影响3.创建新会话,来摆脱原会话控制,当然原进程组合原终端的控制也都摆脱了setsid();这个函数使用后,P'成为新会话组的领头进程了(组长)4.进一步削弱P'(领头进程)的影响,因为如果再打开一个终端的话,将会受到他的直接控制AP'---第

3、二次fork---得到P”,为了继续摆脱终端的影响,紧接着再(exit(0))结束掉组长的进程B此时进程P"还差摆脱进程组的控制,就可以成为守护进程了。所以setpgrp(),成为新组的组长了,P“成为守护进程了PS:P->P’->P''的步骤都是为了摆脱A会话和会话组B控制终端和C进程组的影响,成为一个独立的不受影响的后台服务进程5.剩下的工作就是对守护进程的细节的处理了,就是为了摆脱父亲的控制A:关闭从父进程继承的一切文件描述符(固定格式:max_fd=sysconf(_SC_OPEN_MAX);for(i=0;i

4、umask(0);C:改变进程中的目录chdir("/")//运行文件的时候要sudoD:对标准IO进程重定向fd=open("/dev/null",O_RDWR);dup2(fd,0);dup2(fd,1);dup2(fd,2)6.这下完成了守护进程的准备功能,想要什么功能自己写。--------------------------------------------------------------------------------------------------------------------*/#include#include

5、//signal()#include//fork()setpgrp()sysconf()#include#includeintmain(void){inti,fd;longmax_fd;pid_tpid;charbuf[]="如果你看到这句话,代表本守护进程创建成功";signal(SIGHUP,SIG_IGN);//忽略信号影响signal(SIGTSTP,SIG_IGN);pid=fork();//第一次fork()if(pid>0)exit(0);setsid();//创建新会话组pid=fork();//第二次fork(

6、)if(pid>0)exit(0);setpgrp();//摆脱原进程组max_fd=sysconf(_SC_OPEN_MAX);//关闭从父进程继承的一切文件描述符for(i=0;i

7、进程创建完毕=============================*/fd=open("hello_daemon",O_RDWR

8、O_CREAT,0666);write(fd,buf,strlen(buf));//一定要加sudo来运行本C程序return0;}

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。