daemon函数 linux,daemon函数结合脚本实现start, stop, restart

1. daemon函数

Daemon程序是一直运行的服务端程序,又称为守护进程。通常在系统后台运行,没有控制终端不与前台交互,Daemon程序一般作为系统服务使用。Daemon是长时间运行的进程,通常在系统启动后就运行,在系统关闭时才结束。一般说Daemon程序在后台运行,是因为它没有控制终端,无法和前台的用户交互。Daemon程序一般都作为服务程序使用,等待客户端程序与它通信。我们也把运行的Daemon程序称作守护进程

int daemon (int __nochdir, int __noclose);

如果__nochdir的值为0,则将切换工作目录为根目录;

如果__noclose为0,则将标准输入,输出和标准错误都重定向到/dev /null。

经过这个函数调用后的程序将运行在后台,成为一个daemon程序,而linux下大多的服务都是以此方式运行的

2. daemon实例

最后生成的路径:/home/pc/workspace/daemon/test

#include

#include

#include

#include

int main(int argc, char *argv[])

{

FILE* pidfp = fopen( "kmc_sa.pid", "w" );

if ( pidfp == NULL )

{

perror("error daemon...\n");

exit( 1 );

}

printf("path max %d\n", PATH_MAX);

if(daemon(1, 1) < 0) // 若成功,则后面的代码就是后台服务代码

{

perror("error daemon...\n");

exit(1);

}

printf("pid:%d\n", getpid()); // get process id

printf("uuid:%d\n", getuid()); // get user id

fprintf( pidfp, "%d\n", (int) getpid() ); // 将id保存到文件中,方便后续的关闭进程

fclose( pidfp );

// sleep(10);

while(1)

{

...具体的后台运行代码 }

return 0;

}

脚本:test.sh

#!/bin/sh

echo "hello world", $1 #表示输出第一个参数

case "$1" in

start)

if [ -x /home/pc/workspace/daemon/test ] ; then #首先判断改程序是否为可执行的,是则开始执行

echo "start..."

/home/pc/workspace/daemon/test &

fi

;;

stop)

kill -9 `cat kmc_sa.pid` # 通过之前保存的进程号文件来关闭进程,cat前面的符号不是单引号,而是数字1代表的符号

;;

restart) # 就是讲之前的两步再执行一遍

echo "kill"

echo "restart"

;;

*)

echo "usage: $0 { start | stop | restart}" >&2

exit 1

;;

esac

3. 说明:

在上例test.c中,首先是利用daemon创建一个后台进程,在daemon后面的函数将是在后台执行的代码,特别是对于服务器代码而言,是一个while(1)总是监听端口的死循环,因此在关闭后台进程的时候,需要知道后台进程的pid,所以程序中在daemon执行后,利用getpid()函数获得子进程的pid,并将pid保存在一个文件中。

对于脚本程序,由于我并不懂,直接从一个开源的服务器启动脚本copy出来的,其是利用case来判断是执行哪个命令,需要注意的是在执行之前,首先对文件的属性进行判断,若是可执行文件方才继续执行;关闭进程则利用kill命令和之前保存的进程号来实现

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值