专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »C 教程 » ubuntu启动:ubuntu下Daemon如何自动启动 »正文

ubuntu启动:ubuntu下Daemon如何自动启动

来源: 发布时间:星期四, 2009年2月12日 浏览:146次 评论:0


        前段 时间在写了个Daemon(守护进程),但不知如何开机自动启动在看到debian系统化后茅塞顿开网上介绍Daemon文章多如牛毛
我就不介绍了, Daemon在各个Unix平台下原理是只是实现细节上区别罢了现在我写了个精简Daemon,  详细可以参照Unix环境高级编程
以ubuntu为例(ubuntu为debian分支所以系统编程和配置极为相似)
代码如下
//mydaemon.c
#<unistd.h>
#<stdlib.h>
#<sys/param.h>
#<sys/types.h>
#<sys/stat.h>

void init_daemon(void)
{
pid;
i;

(pid=fork)
    exit(0);
(pid<0)
    exit(1);
//是第子进程
sid;//第子进程成为新会话组长和进程组长, 并和控制终端分离
(pid=fork)
    exit(0);//结束第子进程
(pid< 0)
    exit(1);
//第 2子进程不再是会话组长

for(i=0;i< NOFILE;i)//关闭打开文件描述符
close(i);
chdir("/");//改变工作目录到/
umask(0);//重设文件创建掩模
;
}

{
init_daemon;//使进程成为Daemon
//以下可以添加功能代码
while(1)
{
sleep(10);//睡眠分钟
}
0;
}
输入命令
 gcc mydaemon.c -o mydaemon
./mydaemon
如果成功可以用ps -efjc查看我们会发现这个进程父进程为init,  到这里守护进程成功运行
许多Daemon如ftpd, httpd都设为开机自动运行下面讨论如何通过添加脚本让系统来启动Daemon根据系统化原理文(本blog已转载)介绍
我在/etc/init.d/中添加个新建个脚本为mydaemon, 脚本如下假设我daemon目录为/home/eyesmart/Daemon
#! /bin/sh
# /etc/init.d/mydaemon: start the my daemon.

PATH=/bin:/usr/bin:/sbin:/usr/sbin

binpath=/home/eyesmart/Daemon/mydaemon

test -f $binpath || exit 0

. /lib/lsb/init-functions

"$1" in
  start)
    log_begin_msg "Starting mydaemon..."
    start-stop-daemon --start --quiet  --exec $binpath
    log_end_msg $?
    ;;
  stop)
    log_begin_msg "Stopping mydaemon..."
    start-stop-daemon --stop --retry TERM/1/TERM/1/TERM/4/KILL --quiet --oknodo  --exec $binpath
    log_end_msg $?
    ;;
  restart|force-reload)
    $0 stop
    sleep 1
    $0 start
    ;;
  *)
    log_success_msg "Usage: $binpath {start|stop|restart|force-reload}"
    exit 1
esac

exit 0
大致是这样脚本可以按需要写再细致些,  做到这里按说已经完成但是unix有个run level这个特征所以我们必须对于特定run level创建个链接
般linux是运行level 2那么我们输入下列命令ln -s /etc/init.d/mydaemon /etc/rc2.d/S50mydaemon.
到这里大功告成当你重启系统时候你可以在开机过程中看到自己些所显示信息
其他Unix系统环境在细节上会有所区别但原理
1

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: