linux 守护进程

原文地址linux 守护进程作者wang_qiao_ying


1、简介
守护进程是一种后台运行并且独立于所有终端控制之外的进程。UNIX/Linux 系统通常许多的守护进程,它们执行着各种系统服务和管理的任务。
2、守护进程的启动
守护进程不和任何一个终端相关,启动它的方法有如下几种:
1,在启动脚本中启动
2,由其他进程启动,如inetd程序可以监听网络请求,启动相应的守护进程。
3,由cron定时启动
4,也可以由终端启动,一般用于测试,或者重启服务
3、错误输出
守护进程的错误输出不能输出到终端,由syslog()调用输出至系统的相应日志中。
4、守护进程的建立
1,fork
fork()一个新进程,并终止父进程,这样子进程就成了后台进程,并保证其不是一个进程组的首进程。
2,setsid
然后setsid()创建一个新的进程组,并成为此进程组的首进程,此子进程完全脱离了与原终端的联系,成为独立于终端之外的独立进程。
3,忽略SIGHUP信号,重新fork(),使其不是进程组的首进程,防止可以防止在某些情况下进程意外的打开终端而重新与终端发生联系。
4,改变工作目录,清除文件掩码,使守护进程在在哪里启动都可以,消除自身掩码对创建文件的影响。
5,关闭打开文件。因为子进程会继承父进程的打开文件,这样可以防止以后可能的冲突。
6,打开log;
整个的代码框架如下:

#include<sys/types.h>
#include <signal.h>
#include <unistd.h>
#include <syslog.h>
#define MAXFD 64
void daemon_init(constchar *pname,int facility)
{
int i:
pid_t pid;
/* fork,终止父进程 */
if (pid=fork())
exit(0);
/* 第一子进程 */
setsid();
signal(SIGHUP,SIG_IGN);
/* fork,终止第一子进程 */
if (pid=fork())
exit(0);
/* 第二子进程 */
daemon_proc=1;
/* 将工作目录设定为"/" */
chdir("/");
/* 清除文件掩码 */
umask(0);
/* 关闭所有文件句柄 */
for (i=0;i<MAXFD;i++)
{
close(i);
}
/* 打开 log */
openlog(pname,LOG_PID,facility);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值