APUE守护进程

pag341
守护进程也称精灵进程,时生存期较长的一种进程。他们常常在系统自举时启动,仅在系统关闭时终止。因为没有控制终端,所以说他们时咋后台运行的。

父进程为0的各进程通常是内核进程,他们作为系统自举过程的一部分而启动。(init是此种进程的例外他是内核在自举时启动的用户层命令)

大多数守护进程都以超级用户(用户ID为0)特权运行。没有一个守护进程具有控制终端,其终端名设置为问号(?),终端前台进程组ID设置为-1。所有用户层守护进程都是进程组的组长进程以及会话的首进程,而且是这些进程组和会话中的唯一进程。大多数守护进程的父进程时init进程。

pag342
守护进程编程规则:
1、调用umask将文件模式创建屏蔽字设置为0。
2、调用fork,然后使父进程退出(exit)。(保证了子进程不是一个进程组组长进程)
3、调用setsid创建一个新会话。(使调用进程:a,成为新会话的首进程;b,成为一个新进程组的组长进程;c,没有控制终端)
(再次调用fork,避免无意中获得新的控制终端)(当没有控制终端的一个会话首进程打开一个终端设备时(不是其他会话的控制终端)该终端自动成为这个会话首进程的控制终端,再次调用fork确保新进程不再是会话首进程,从而不能自动获得一个控制终端)
会话首进程终止时会产生SIGHUP信号,所以要先忽略
4、将当前工作目录改为根目录。
5、关闭不再需要的文件描述符。
6、某些守护进程打开/dev/null使其具有文件描述符0、1、2,这样任何一个试图读标准输入、写标准输出或标准出错的库例程都不会产生任何效果。

pag346
void openlog( const char *ident, intoption, int facility );
void syslog( int priority, const char*format, ...);//产生日志信息
void closelog( void );
int setlogmask( int maskpri);//设置进程的记录优先级屏蔽字
openlog是可选择的。如果不调用openlog,则在第一次调用syslog时,自动调用openlog。closelog也是可选择的。

单实例守护进程:不允许相同程序以守护进程的形式在同一时间运行多次(可使用文件和记录锁)

守护进程的惯例:
1、守护进程使用锁文件,那么该文件通常存放在/var/run目录中。(name.pid)
2、若守护进程支持配置选项,那么配置文件通常存放在/etc目录中。(name.conf)
3、守护进程可用命令行启动,但通常他们是由系统初始化脚本之一(/etc/rc* 或 /etc/init.d/*)启动的
4、若守护进程有一配置文件,那么当守护进程启动时,他读该文件,但在此之后一般就不会查看他。若一管理员更改了配置文件,那么该守护进程可能需要被停止,然后再启动,以使配置文件的更改生效。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值