一.要使自己的程序作为daemon进程,自己的程序需要遵循一些基本规则
1.调用fork
2.在子进程中调用setsid()
3.把工作目录更改为根目录chdir("/"). (可选)
4.关闭不需要的描述符 (可选)
int main(int argc, char** argv )
{
if( argc == 2 &&
( strcasecmp( argv[1],"-daemon" ) == 0) ) //精灵进程模式
{
pid_t pid = fork();
if( pid <0 )
{
printf( "创建精灵进程失败!errorcode= %d[%s]",errno, strerror( errno ) );
return (-1);
}
if( pid !=0 )
exit(0);
setsid();
chdir("/");
}
//程序的工作流程
}
二.在/etc/rc.d/init.d/目录下加入自己程序的服务启动脚本,如下
#!/bin/bash
#
# chkconfig: 2345 20 80
# description: start and stop the file transmit service for ***
#
ftdir=/home/test
echo "$ftdir"
[ -d $ftdir ] || exit 0
start() {
cd "$ftdir"
if [ -e ftsrv ];then
./ftsrv -daemon >/dev/null
else
echo "ftsrv is not in dir $ftdir"
fi
echo "ftsrv start completed"
}
stop() {
pid=$( ps -ef|grep ftsrv|awk '{print $2}'|head -n 1)
echo $pid
kill -9 $pid
echo "ftsrv stop completed"
}
restart() {
stop
sleep 1
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo $"Usage: $0 {start|stop|restart}"
esac
注意开始的chkconfig那行注释是必须要的,否则在下面调用chkconfig时就会出错
加了这个脚本以后就可以通过
service ftsrv start 启动服务
service ftsrv sop 终止服务
service ftsrv sop 重启服务
三.是自己的程序在系统启动的时候自启动
可以通过chkconfig --add ftsrv 使ftsrv在系统启动时自启动
可以通过chkconfig --del ftsrv 去掉自启动