linux c语言学习笔记之守护进程

本文详细介绍了如何在Linux系统中使用C语言编写守护进程,包括五个关键步骤:fork、setsid、改变当前目录、重置文件权限掩码以及关闭文件描述符。通过示例代码展示了守护进程如何将信息写入日志文件,并强调了守护进程的错误处理通常通过syslog服务进行。
摘要由CSDN通过智能技术生成

哈尔滨理工大学软件工程专业08-7李万鹏原创作品,转载请标明出处

http://blog.csdn.net/woshixingaaa/archive/2010/06/06/5651095.aspx

 

守护进程 概述

守护进程( daemon )是生存期长的一种进程。它们常常在系统引导装入时起动,在系统关闭时终止。因为它们没有控制终端,所以说它们是在后台运行的。linux 系 统有很多守护进程,它们执行日常事物活动。
所有守护进程都以超级用户(用户I D0 )的优先权运行。
没有一个守护进程具有控制终端—终端名称设置为问号(?)、终端前台进程组I D 设置为-1 。缺少控制终端可能是精灵进程调用了s e t s i d 的结果。
u p d a t e 以外的所有精灵进程都是进程组的首进程,对话期的首进程,而且是这些进程组和对话期中的唯一进程。u p d a t e 是它所在进程组和对话期(中的唯一进程,但是该进程组的首进程(可能也是该对话期的首进程)已经终止。
所有这些守护进程的父进程都是i n i t 进程。

守护进程编程5:

1. 首先做的是调用fork(), 然后使父进程exit, 这样做实现了以下几点, 如果该守护进程是由一条简单shell 启动的, 那么使父进程终止使 得shell 认为这条命令已经执行完成。第二, 子进程继承了父进程的进程组ID, 这就保证了子进程不是一个进程组的首进程. 这对于下面就要做的 setsid 调用是必要的前提

2. 调用setsid 以创建一个新的会话, 并担任该会话组的组长. 调用setsid 的作用由三个:

  1. 成为新的会话组的首进程

  2. 成为新的进程组的首进程

  3. 脱离控制终端

setsid() 函数格式:

#include <sys/types.h>

#incldue <unistd.h>

pid setsid() 成功时返回该进程组的ID, 失败时返回-1

3. 改变当前目录为根目录

chdir(“/”);

4. 重设文件权限掩码

umask(0);

由继承得来的文件方式创建屏蔽字可能会拒绝设置某些许可权, 例如: 若守护进程要创建一个组可读写的文件,

而继承的文件方式创建屏蔽字, 屏蔽了这两种许可权限, 则所要求的组可读写就不起作用.

5. 关闭不在需要的文件描述符

守护进程的出错处理:

守护进程完全脱离了控制终端,因此,不能像其他程序一样通过输出错误信息到控制台的方式来通知程序员。 <

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值