浅释守护进程

原创 2006年06月05日 12:59:00
其实,守护进程编程也没什么很深奥的。简单的说就那么几点:(当然,任何东西深入都不易!)  
     
  1.所谓守护进程,就是更外界没什么关系,自己总是守护在那里,我行我素,死板的按自己那一套循规蹈矩的重复工作的进程。它于外界是脱离的,不接受外界的信息也不反馈信息给外界。总在后台工作。从系统起动那一刻开始,直到关闭系统结束,其间,不受人干涉。它唯一接受的明令就是它设计时候规定要扑捉的信号。  
     
  2.在子进程中,也就是守护进程中调用setsid()函数创建新会话会话。什么是会话呢?就好比一个多兵种的综合性师,它有炮团,空降大队,坦克团,信息大队,步兵团,快艇大队。虽然各兵种没什么关系,但是,可以在师部的统一领导下协调作战。会话就是师部,而各负其责的进程组就是各兵种单位。师部只要向个兵种组下明令就行了而不关心每个士兵之间的协调。那么,setsid的作用是:如果调用进程不是一个进程组的领导进程的话,它就创立一个新会话,让调用进程成为新会话的会话领导。它同样让调用进程成为新进程组的进程领导,同时,它把进程组ID(PGID)和会话ID(SID)设置为调用进程的进程ID。最后,它消除新进程与任何终端的关联。为看为还是用通俗的语句来解释一下:如果有一个坦克兵认为自己很牛,可以当师长。这个时候他怎么做呢?他如果他不时坦克团团长,他就自己建立一个师,自任师长。并且,自己任命自己为这个新师下面坦克团的团长,随后,他把师和团的番号都用自己的军号命名,(因为他以后还要招兵买马),最后把隔断一切与以前的关系(就象台湾一样,推行‘去中国化’)最后宣布独立。于是,一个新的师产生了。 
     
  3.让根目录成为守护进程的工作目录。大家知道,GNUlinux 和UNIX类操作系统(文件系统是挂接上去的。卸载的时候是以游历目录树的方式卸载的。如果守护进程工作在这些挂结的文件系统上,并且,又蛮不讲理,不理会别人的任何行动。那么,文件就卸不下来。所以,只能运行在根目录/下。
      
  4.守护进程是革忘恩负义,大逆不道的家伙。他由父进程用fork()创造,一旦生出来就隔断与他老爹的关系。大家知道的,父亲生出的儿子,儿子很多地方象他老子,这一点我们叫做继承。是的,守护进程是被他老子fork()出来的自然继承了他老子的那一套。所以,要脱离父子关系就必须隔断这写继承,而自立门户,所以,我们在建立守护进程的时候,不管他父亲的umask是多少,我们都应该人它的变为0.为什么要设为0呢?因为,如果守护进程创建文件的话,可以自由设定他的权限而不是受制于他父亲的默认值!umask就是他们的权限。另外呢,子进程会继承父进程的文件描述符,这地球人都知道。但是,既然下定决心做守护进程,那么,这些都要关闭,不能拉拉撤撤。起码最基本的三个无论如何要关调:STDIN,STDOUT,STDERR,至于那些打开的配置文加,就要看情况了!
      
      #include
      #include
      #include
      #include
      #include
      #include
      #include
      #include
      
      int main(void)
      {
      pid_t sid,pid;
      char buff[]="Hello,linux, this is a process !";
      int len,fd;
      if (pid=fork()<0)
      {
      perror(fork);
      exit(EXIT_FAILURE)
      }
      if (pid >0)
      exit(0(;
      if (sid=setsid() < 0)
      {
      perror(setid);
      exit(EXIT_FAILURE);
      }
      
      if ((chdir("/"))<0)
      {
      perror(chdir);
      exit(EXIT_FAILURE);
      }
      umask(0);
      
      close(STDIN);
      close(STDOUT);
      close(STDERR);
      
      while(1)
      {
      len=sizeof(buff);
      if (fd=open("/var/log/crazydragon.log",O_CREAT|O_WRONLY| O_APEND,0644)<0)
      {
      perror(open);
      exit(EXIT_FAULURE);
      }
      write(fd, buff,len+1);
      close(fd);
      sleep(60);
      }
      exit(EXIT_SUCCESS);
      }
  以上是一个最简单的守护进程的实例。它的除了每分钟向/var/log/crazydragon.log中写一次‘hello,linux, this is a process"外什么都干不了,另外也不接受任何信号除了kernerl的SIGKILL.但是,它具备了以上讲的守护进程的几点基本原则。

楞严咒浅释

楞严咒浅释第一会南无萨怛他.苏伽多耶 .阿罗诃帝.三藐三菩陀写 (我今礼敬皈命,一切如来应正等觉)南无萨怛他.佛陀俱胝瑟尼钐 (皈命一切诸佛大佛顶首)南无萨婆.勃陀勃地.萨跢鞞弊 (皈命诸大菩萨至心承...
  • jbgtwang
  • jbgtwang
  • 2009年02月19日 23:44
  • 1977

【Linux】守护进程及守护进程的创建

守护进程       守护进程是生存期长的一种进程。它们常常在系统引导装入时启动,仅在系统关闭时才终止。        守护进程没有控制终端。因此,说他们是在后台运行的。UNIX系统有很多守护进程,...
  • lixungogogo
  • lixungogogo
  • 2016年08月03日 12:26
  • 1072

Linux守护进程简介和实例详解

守护进程(Daemon)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.守护进程是一种很有用的进程.Linux的大多数服务器就是用守护进程实现的.比如,I...
  • ce123
  • ce123
  • 2014年07月30日 16:02
  • 9343

crontab----定时调用的守护进程

前一天学习了 at 命令是针对仅运行一次的任务,循环运行的例行性计划任务,linux系统则是由 cron (crond) 这个系统服务来控制的。Linux 系统上面原本就有非常多的计划性工作,因此这个...
  • wsclinux
  • wsclinux
  • 2015年01月14日 14:53
  • 1046

如何使守护进程开机启动

写一个简单的守护进程,如何做到让其开机启动呢?精灵化daemon这个守护进程,无论是使用shell脚本写的,还是使用C等编译型语言写的,都需要经过进程脱离终端转入后台执行的过程,可以代码层面精灵化,也...
  • lanyang123456
  • lanyang123456
  • 2017年04月30日 15:42
  • 763

Linux使用日志系统调试守护进程

守护进程脱离终端控制,在调试时候造成一定不便。可以用syslog服务把程序出错信息输入日志文件中。从而可以看出问题所在。   把上次的程序用日志方式改写。   主要用到三个函数:syslog,op...
  • tycoon1988
  • tycoon1988
  • 2014年09月05日 18:08
  • 353

如何实现守护进程?

守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进程。 1、守护进程最重要的特性是后台运行。 2、守护进程...
  • qq_26499321
  • qq_26499321
  • 2017年05月25日 12:01
  • 392

Java 多线程之-----守护进程

守护进程,顾名思义就是默默在后台运行的进程,当JVM上没有其他进程运行时运行的进程,最典型的一个列子就是 JVM自带的垃圾清理机,他就是在其他程序不运行的时候占用CPU来进行清理内存垃圾,因此他具有...
  • a352193394
  • a352193394
  • 2014年09月15日 23:38
  • 5671

守护进程概念,以及怎么创建守护进程

转载出处:http://www.cnblogs.com/mickole/p/3188321.html 一,守护进程概述 Linux Daemon(守护进程)是运行在后台的一种特殊进程。它独立于控制...
  • ONE_PIECE_HMH
  • ONE_PIECE_HMH
  • 2016年10月09日 20:32
  • 3475

守护进程理解和实现

守护进程理解和实现
  • xwc583413343
  • xwc583413343
  • 2017年02月21日 15:48
  • 209
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:浅释守护进程
举报原因:
原因补充:

(最多只允许输入30个字)