摘要: http://www.cnblogs.com/nufangrensheng/p/3515035.html中曾将系统调用分成“低速”系统调用和其他系统调用两类。低速系统调用是可能会使进程永远阻塞的一类系统调用,它们包括下列调用:如果某些文件类型(例如管道、终端设备和网络设备)的数据并不存在,则读操作可能会使调用者永远阻塞。如果数据不能立即被上述同样类型的文件接受(由于在管道中无空间、网络流控制等),则写操作也会使调用者永远阻塞。在某种条件发生之前,打开某些类型的文件会被阻塞(例如打开一个终端设备可能需等到与之连接的调制解调器应答;又例如在没有其他进程已用读模式打开该FIFO时,若以只写模式打开F 阅读全文
posted @ 2014-02-11 20:25 ITtecman 阅读(777) 评论(0) 推荐(0) 编辑
摘要: /** Error routines for programs that can run as a daemon.*/#include "apue.h"#include /* for definition of errno */#include /* ISO C variable arguments */#include static void log_doit(int, i... 阅读全文
posted @ 2014-02-11 17:20 ITtecman 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 守护进程常常用作服务器进程。 一般而言,服务器是等待客户进程与其联系的一个进程,客户进程向它提出某种类型的服务要求。 阅读全文
posted @ 2014-02-11 16:48 ITtecman 阅读(236) 评论(0) 推荐(0) 编辑
摘要: 在UNIX系统中,守护进程遵循下列公共惯例: 若守护进程使用锁文件,那么该文件通常存放在/var/run目录中。注意,守护进程可能需要具有超级用户权限才能在此目录下创建文件。锁文件的名字通常是name.pid,其中,name是该守护进程或服务的名字。例如cron守护进程锁文件的名字是/var/run/crond.pid。 若守护进程支持配置选项,那么配置文件通常存放在/etc目录中。... 阅读全文
posted @ 2014-02-11 16:37 ITtecman 阅读(1110) 评论(0) 推荐(0) 编辑
摘要: 为了正常运行,某些守护进程实现为单实例的,也就是在任一时刻只运行该守护进程的一个副本。例如,该守护进程可能需要排它地访问一个设备。在cron守护进程情况下,如果同时有多个实例运行,那么每个副本都可能试图开始某个预定的操作,于是造成该操作的重复执行,这很可能导致出错。 如果守护进程需要访问一设备,而该设备驱动程序将阻止多次打开在/dev目录下的相应设备节点,那么这就达到了任何时刻只运行守护进程一个... 阅读全文
posted @ 2014-02-11 14:42 ITtecman 阅读(2848) 评论(2) 推荐(0) 编辑
摘要: 与守护进程有关的一个问题是如何处理出错消息。因为它没有控制终端,所以不能只是简单地写到标准出错上。在很多工作站上,控制台设备运行一个窗口系统,所以我们不希望所有守护进程都写到控制台设备上。我们也不希望每个守护进程将它自己的出错消息写到一个单独的文件中。对系统管理人员而言,如果要关心哪一个守护进程写到哪一个记录文件中,并定期地检查这些文件,那么一定会使他感到头痛。所以,需要有一个集中的守护进程出错记... 阅读全文
posted @ 2014-02-11 13:58 ITtecman 阅读(667) 评论(0) 推荐(0) 编辑
摘要: 在编写守护进程时需遵循一些基本规则,以便防止产生并不需要的交互作用。下面先说明这些规则,然后给出一个按照这些规则编写的函数daemonize。(1)首先要做的是调用umask将文件模式创建屏蔽字设置为0。由继承得来的文件模式创建屏蔽字可能会拒绝设置某些权限。例如,若守护进程要创建一个组可读、写的文件,而继承的文件模式创建屏蔽字可能屏蔽了这两种权限,于是所要求的组可读、写就不能起作用。(2)调用fork,然后使父进程退出(exit)。这样做实现了下面几点:第一,如果该守护进程是作为一条简单shell命令启动的,那么父进程终止使得shell认为这条命令已经执行完毕(也就没有了控制终端);第二,子进 阅读全文
posted @ 2014-02-11 11:39 ITtecman 阅读(1912) 评论(2) 推荐(1) 编辑