你了解过Linux后台服务进程的开发过程?

守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进程。     Linux   的大多数服务器就是用守护进程实现的。比如,In     te   rnet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任务。比如,作业规划进程crond,打印进程lpd等。
守护进程的编程本身并不复杂,复杂的是各种版本的Unix的实现机制不尽相同,造成不同 Unix环境下守护进程的编程规则并不一致。需要注意,照搬某些书上的规则(特别是BSD4.3和低版本的System V)到Linux会出现错误的。下面将给出Linux下守护进程的编程要点和详细实例。
一. 守护进程及其特性
守护进程最重要的特性是后台运行。在这一点上DOS下的常驻内存程序TSR与之相似。其次,守护进程必须与其运行前的环境隔离开来。这些环境包括未关闭的文件描述符,控制终端,会话和进程组,工作目录以及文件创建掩模等。这些环境通常是守护进程从执行它的父进程(特别是shell)中继承下来的。最后,守护进程的启动方式有其特殊之处。它可以在Linux系统启动时从启动脚本/etc/rc.d中启动,可以由作业规划进程crond启动,还可以由用户终端(通常是 shell)执行。
总之,除开这些特殊性以外,守护进程与普通进程基本上没有什么区别。因此,编写守护进程实际上是把一个普通进程按照上述的守护进程的特性改造成为守护进程。如果对进程有比较深入的认识就更容易理解和编程了。
二. 守护进程的编程要点
前面讲过,不同Unix环境下守护进程的编程规则并不一致。所幸的是守护进程的编程原则其实都一样,区别在于具体的实现细节不同。这个原则就是要满足守护进程的特性。同时,Linux是基于Syetem V的S     VR   4并遵循Posix标准,实现起来与BSD4相比更方便。编程要点如下;
1. 在后台运行。
为避免挂起控制终端将Daemon放入后台执行。方法是在进程中调用fork使父进程终止,让Daemon在子进程中后台执行。
if(     pi   d=fork())
exit(0); //是父进程,结束父进程,子进程继续
2. 脱离控制终端,登录会话和进程组
有必要先介绍一下Linux中的进程与控制终端,登录会话和进程组之间的关系:进程属于一个进程组,进程组号(GID)就是进程组长的进程号(PID)。登录会话可以包含多个进程组。这些进程组共享一个控制终端。这个控制终端通常是创建进程的登录终端。控制终端,登录会话和进程组通常是从父进程继承下来的。我们的目的就是要摆脱它们,使之不受它们的影响。方法是在第1点的基础上,调用setsid()使进程成为会话组长:
setsid();
说明:当进程是会话组长时setsid()调用失败。但第一点已经保证进程不是会话组长。setsid()调用成功后,进程成为新的会话组长和新的进程组长,并与原来的登录会话和进程组脱离。由于会话过程对控制终端的独占性,进程同时与控制终端脱离。
3. 禁止进程重新打开控制终端
现在,进程已经成为无终端的会话组长。但它可以重新申请打开一个控制终端。可以通过使进程不再成为会话组长来禁止进程重新打开控制终端:
if(pid=fork()) exit(0); //结束第一子进程,第二子进程继续(第二子进程不再是会话组长)

你了解过Linux后台服务进程的开发过程?_设计制作_测量仪表
36
185
0
25

相关资讯

  1. 1、她曾出演尺度港片闻名,生活中却为人低调,更是人如其名既淑又贞3779
  2. 2、《如懿传》李纯演技爆发,一个细节比周迅的“哑巴式哭戏”更精彩1201
  3. 3、侯京健《觉醒年代》再度饰演“毛教员”恰同学少年热血爱国2735
  4. 4、《正青春》首播获好评多平台热度领先反响不断4971
  5. 5、才说要155亿买新丽,阅文就跌破发行价,被高估的IP价值?687
  6. 6、《理想照耀中国》演员MV片花,王一博军装飒爽,赵丽颖爆发力惊人2688
  7. 7、揭秘沙鲁克·汗《Zero》幕后竟有两部大片因它改变上映日期3478
  8. 8、成龙历险记:盘点龙叔命悬一线的7个惊心时刻!1862
  9. 9、一上映观众打出了8.5分,这部新片夺下韩国票房冠军!1023
  10. 10、《长歌行》越来越虐了,阿诗勒隼身世曝光,和李长歌开启虐恋模式3300
全部评论(0)
我也有话说
0
收藏
点赞
顶部