- 浏览: 864142 次
- 性别:
- 来自: 济南
文章分类
- 全部博客 (280)
- java相关 (29)
- linux系统 (55)
- ipsec (0)
- ssl (3)
- 信息安全 (13)
- web相关 (35)
- windows (9)
- c,c++ (14)
- log4j (3)
- hibernate (8)
- sqlite (1)
- 程序人生 (2)
- js (2)
- 生活点滴 (3)
- 网络相关 (14)
- 问题积累 (15)
- 数据库相关 (27)
- 软件测试 (2)
- PKI相关 (2)
- 程序设计 (7)
- 犄角旮旯 (0)
- 杂七杂八 (0)
- 硬件相关 (14)
- 防火墙 (2)
- 电子商务 (2)
- 多媒体相关 (1)
- 内存管理 (4)
- 面向对象 (1)
- csp (1)
- 驱动开发 (3)
- 移动开发 (2)
- openssl多线程实例 (1)
最新评论
-
xiaoyao3857:
博主很有探索精神嘛,学习了
Linux主机名Hostname详解 -
hiskyrisa:
言简意赅,好文章。
Flex是什么 -
layznet:
犯了类似错误。使用的是derby数据库。driverClass ...
java.sql.SQLException: No suitable driver -
idision:
你好,文章有一句createSubjectKeyId(keyT ...
bouncycastle 产生证书 -
zheng12tian:
代码有全的不?只贴一部分,,,,
在LOG4J中把日志写入远程数据库
引言
Daemon 程序,又称为守护进程,通常在系统后台长时间运行,由于没有控制终端而无法与前台交互。 Daemon 程序一般作为系统服务使用, Linux 系统中运行着很多这样的守护进程,如 iptables , nfs , ypbind , dhcpd 等。
Daemon 设计原则
Daemon 程序设计主要原则包括:
(1) 程序运行后调用 fork ,并让父进程退出。子进程获得一个新的进程 ID ,但继承了父进程的进程组 ID 。
(2) 调用 setsid 创建一个新的 session ,使自己成为新 session 和新进程组的 leader ,并使进程没有控制终端 (tty) 。
(3) 设置文件创建 mask 为 0 ,避免创建文件时权限的影响。
(4) 关闭不需要的打开文件描述符。因为 Daemon 程序在后台执行,不需要于终端交互,通常就关闭 STDIN 、 STDOUT 和 STDERR 。其它根据实际情况处理。
(5) Daemon 无法输出信息,可以使用 SYSLOG 或自己的日志系统进行日志处理。(可选)
(6) 编写管理 Daemon 的 SHELL 脚本,使用 service 对 Daemon 进行管理和监控。(可选)
Daemon 程序框架
int init_daemon(void)
{
pid_t pid;
int i;
/* parent exits , child continues */
if((pid = fork()) < 0)
return -1;
else if(pid != 0)
exit(0);
setsid(); /* become session leader */
for(i=0;i< NOFILE ;++i) /* close STDOUT, STDIN, STDERR, */
close(i);
umask(0); /* clear file mode creation mask */
return 0;
}
void sig_term(int signo)
{
if(signo == SIGTERM) /* catched signal sent by kill(1) command */
{
wsio_logit("", "wsiod stopped\n");
exit(0);
}
}
/* main program of daemon */
int main(void)
{
if(init_daemon() == -1){
printf("can't fork self\n");
exit(0);
}
wsio_logit("", "wsiod started\n");
signal(SIGTERM, sig_term); /* arrange to catch the signal */
while (1) {
// Do what you want here
… …
}
exit(0);
}
Daemon 日志
这里使用自己的日志系统,当然也可以使用 SYSLOG 。
#define LOGBUFSZ 256 /*log buffer size*/
#define LOGFILE "/var/log/wsiod.log" /*log filename*/
int wsio_logit(char * func, char *msg, ...)
{
va_list args;
char prtbuf[LOGBUFSZ];
int save_errno;
struct tm *tm;
time_t current_time;
int fd_log;
save_errno = errno;
va_start (args, msg);
(void) time (¤t_time); /* Get current time */
tm = localtime (¤t_time);
sprintf (prtbuf, "%02d/%02d %02d:%02d:%02d %s ", tm->tm_mon+1,
tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec, func);
vsprintf (prtbuf+strlen(prtbuf), msg, args);
va_end (args);
fd_log = open (LOGFILE, O_WRONLY | O_CREAT | O_APPEND, 0664);
write (fd_log, prtbuf, strlen(prtbuf));
close (fd_log);
errno = save_errno;
return 0;
}
Daemon 管理
Daemon 程序可以使用 service 工具进行管理,包括启动、停止、查看状态等,但前题是需要编写一个如下的简单 SHELL 脚本。
# /etc/rc.d/init.d/wsiod
#!/bin/sh
#
# wsiod This shell script takes care of starting and stopping wsiod.
#
# chkconfig: 35 65 35
# description: wsiod is web servce I/O server, which is used to access files on remote hosts.
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
RETVAL=0
prog="wsiod"
WSIOARGS="-h $HOSTNAME -p 80 -t STANDALONE -k -c -d"
start() {
# Start daemons.
echo -n $"Starting $prog: "
daemon /usr/local/bin/wsiod ${WSIOARGS}
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/wsiod
return $RETVAL
}
stop() {
# Stop daemons.
echo -n $"Shutting down $prog: "
killproc wsiod
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/wsiod
return $RETVAL
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
restart|reload)
stop
start
RETVAL=$?
;;
status)
status wsiod
RETVAL=$?
;;
*)
echo $"Usage: $0 {start|stop|restart|status}"
exit 1
esac
exit $RETVAL
OK ,到这儿为止,一个完整的 Linux Daemon 程序就完成了。
参考文献
[1] Linux C 高级程序员指南 / 毛曙福编著,北京,国防工业出版社, 2001.2
[2] CASTOR NS 源代码 http://castor.web.cern.ch/castor/
[3] 若干网络文献
发表评论
-
Linux c的多线程编程实例
2011-07-19 17:28 1970通过创建两个线程来实现对一个数的递加。或许这个实例没有实际运用 ... -
linux下进程的最大线程数、进程最大数、进程打开的文件数
2011-06-22 17:35 1945linux 系统中单个进程的 ... -
Linux中dos2unix的批量转换命令
2011-01-05 10:31 6973在Linux中将DOS 格式转换为Unix格式的文件可以使用d ... -
linux双网关双线路网络设置
2010-08-03 19:10 2009由于电信和网通之间互联互通 的问题,很多 ... -
syslog-ng学习心得之二
2010-07-06 08:58 2438在[url]http://coolerfeng.blog.51 ... -
syslog-ng学习心得之一
2010-07-06 08:58 2743转载一篇syslog-ng的文章的,本来是想打算自己写一篇 ... -
Linux用户进程是如何释放内存
2009-12-25 17:16 2058Linux进程使用内存的基本流程: 见图1 从 ... -
Linux内存使用详解
2009-12-25 16:56 2375一提到内存管理,我们 ... -
linux下查看内存使用情况
2009-12-25 14:56 1992在Linux下查看内存我们 ... -
Linux编程C++内存管理之内存分配详解
2009-12-21 21:33 1756程序员们经常编写内存 ... -
内核模块调试方法
2009-11-17 11:23 2581对 于任何一位内核代 ... -
Linux操作系统下以太网卡的安装及配置
2009-11-11 17:18 1677Linux操作系统以其 独有的开放性、稳定性、高 ... -
跟我一起写 Makefile(3)
2009-11-03 14:38 635“-s” “--silent” “--quiet” 在命 ... -
跟我一起写 Makefile(2)
2009-11-03 14:35 956书写命令 ———— 每 ... -
跟我一起写 Makefile(1)
2009-11-03 14:32 981陈皓 (CSDN) 概述 — ... -
CC与GCC的区别概括介绍
2009-11-03 14:29 1451从名字上看,老的unix系统 的CC程序叫做C Comp ... -
linux内核模块管理命令
2009-10-30 10:54 17091. lsmod 列出已经加载的内核模块 lsmo ... -
分区修复软件Testdisk 安装使用
2009-08-26 14:23 4915linux下超帅的分区表修复软件.以前用过n多的window ... -
Linux下的分区修复软件Testdisk
2009-08-26 10:40 1855好了,这个软件叫testdisk.很帅的。。 如果你是使 ... -
Linux分区数据恢复
2009-08-26 10:18 1445公司的一台redhat机器启动不了了,是由于多次非正常关机造成 ...
相关推荐
在Linux系统中,Daemon程序是不可或缺的一部分,它们作为后台服务长期运行,提供各种系统功能和服务。Daemon不依赖于任何终端,通常在系统启动时启动,系统关闭时终止。这类程序通常用于网络服务(如HTTP服务器)、...
"daemonup-0.92"可能是一个具体的守护进程监控程序的版本号,这表明存在一个名为"daemonup"的工具,版本为0.92,专门设计用于监视和管理Linux环境中的守护进程。用户可以通过安装和配置这个工具来实现对Apache服务器...
《Linux程序设计》课程主要涵盖了Linux操作系统的基础知识、Shell编程、C程序设计以及网络程序设计等多个方面,旨在培养学生的Linux操作系统应用能力、系统程序设计能力和网络编程能力。以下是该课程的详细知识点...
《Linux程序设计(第3版)》是一本深入探讨Linux环境下程序开发的经典著作。这本书针对的是那些希望在Linux操作系统上进行高效程序设计的开发者。它不仅涵盖了基础的编程概念,还详细介绍了Linux系统调用、文件I/O、...
这是因为Daemon程序可能需要在运行过程中创建或修改文件,而继承的文件权限掩码可能对这些操作产生限制。 除此之外,还需要注意以下几点: - **重定向标准输入、输出和错误流**:通常,Daemon进程需要将标准输入、...
本教程主要探讨的是Linux高级程序设计中的进程管理,涉及到如何创建、控制、监控以及管理进程,特别是关于守护进程(Daemon)的深入理解。 首先,我们要了解什么是进程。在Linux中,进程是程序的执行实例,每个进程...
│ ├38 - Linux高级程序_进程管理_Daemon2.avi │ ├39 - Linux高级程序_进程管理_Daemon3.mp4 │ ├40 - Linux高级程序_进程间通信_Pipe1.avi │ ├41 - Linux高级程序_进程间通信_Pipe2.mp4 │ ├42 - Linux高级...
标题中的"arm linux 嵌入式 查proc的软看护程序"提到了在ARM架构的Linux系统上,通过`/proc`文件系统来管理软看门狗服务。`/proc`是一个虚拟文件系统,它提供了一个查看和修改内核状态的接口。 软看门狗守护进程...
Butler开发,最初是为Linux系统设计的,但现在也适用于其他类UNIX系统,包括Windows。它的核心功能包括服务的自动启动、停止、监视和日志管理。对于系统管理员来说,这是一个不可或缺的工具,能够帮助他们确保系统...
在IT行业中,守护进程(Daemon)是Linux操作系统中的一种特殊进程,它在后台运行,没有控制终端,并且通常在系统启动时启动,提供持续的服务。守护进程常用于网络服务,如HTTP服务器、FTP服务器等。Socket是网络通信...
总之,Linux应用程序开发指南:使用Gtk+ Gnome库是一门涉及多方面技术的知识体系,包括图形界面设计、事件处理、系统集成、调试技巧以及项目构建。熟练掌握这些技能,开发者就能创建出符合Gnome标准、功能强大且用户...
- 服务器程序为守护进程(daemon)。 - 采用多线程技术,支持向多个监控中心报告数据。 7. **客户端功能**: - 发送鉴权信息。 - 显示服务器状态。 - 刷新服务器系统信息。 8. **时序图**: 描述了客户端与...
守护进程(Daemon)在计算机术语中,是指一种在后台运行并且不与终端直接关联的程序。它们通常在操作系统启动时启动,负责执行特定任务,如网络服务、定时任务、系统监控等。在Unix和类Unix系统中,如Linux,守护...
- **概述**:探讨了守护进程(Daemon)的概念、启动方式及其管理。 - **学习要点**: - 守护进程的特点和用途。 - 守护进程的启动过程。 - 错误输出的处理方法。 - 创建守护进程的步骤。 #### 四、进程间通信 ...
内核从2.0开始,Linux增加了对模块的支持,而模块是指在引导的时候不被持久的装入内存的大程序,它们只是在需要的时候才被装入,而当它们有一段时间不使用时,便从内存中退出。 Enable loadable module support:...
### 嵌入式Linux应用程序开发详解:关键...以上概述了嵌入式Linux应用程序开发中的关键知识点,从底层硬件选择、操作系统配置到应用程序设计和测试,每一步都需要深入理解和精心设计,以确保最终产品的稳定性和效率。
* 服务器是一个 daemon 程序。 * 服务器采用多线程的编程技术,可以同时支持向多个监控中心汇报数据。 4.2 客户端功能 * 客户端发送用户名/密码,通过服务器鉴权。 * 显示服务器状态。 * 刷新服务器系统信息。 ...
在嵌入式Linux系统中,应用程序的开发是一个关键环节,特别是在涉及进程控制的时候。本章节主要探讨了如何在Linux环境下进行进程的创建、管理、通信以及同步等操作,这些都是实现高效、稳定系统运行的核心技术。 一...
在给定的“ftdi-daemon-0.4.tar.gz”压缩包中,我们有一个名为“ftdi-daemon”的程序,它是针对Multiclet Evolution Board特定设计的USB驱动加载守护进程(daemon)。 守护进程是一种在后台运行且不与终端关联的...