linux系统编程 守护进程

Daemon(精灵)进程,是linux中的后台服务进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。一般采用以d结尾的名字。

linux后台的一些服务进程,没有控制终端,不能直接和用户交互,不受用户登录、注销的影响,一直在运行着,他们都是守护进程。如预读入缓输出机制的实现:ftp服务器、nfs服务器等。

chdir()函数头文件 #include<unistd.h> |原型:int chdir(const char *path);

umask()函数头文件 #include<sys/types.h>#include<sys/stat.h>|原型:mode_t umask(mode_t mask);

创建守护进程模型

  1. 创建子进程,父进程退出,所有工作在子进程中进行形式上脱离了控制终端
  2. 子进程中创建新会话,使用setsid()函数、使子进程完全独立出来,脱离控制
  3. 改变当前目录为根目录或其他目录,使用chdir()函数、防止占用可卸载的文件系统
  4. 重设文件权限掩码,使用umask()函数、防止继承的文件创建拒绝某些权限
  5. 关闭文件描述符,0:标准输入、1:标准输出、2:标准出错
  6. 开始执行守护进程核心工作
  7. 守护进程退出处理程序模型
  1 #include<stdio.h>
  2 #include<sys/types.h>
  3 #include<sys/stat.h>
  4 #include<unistd.h>
  5 #include<fcntl.h>
  6 #include<stdlib.h>
  7 void mydaemond(void)
  8 {
  9         pid_t pid,sid;
 10         int ret;
 11         pid = fork();
 12         if(pid==-1){
 13                 perror("fork error\n");
 14         }
 15         if(pid>0){
 16                 exit(0);
 17         }
 18         sid = setsid();
 19         if(sid==-1){
 20                 perror("setsid error\n");
 21         }
 22         ret=chdir("/home/bobo/linux-signal-code");
 23         if(ret==-1){
 24                 perror("chdir error\n");
 25         }
 26         umask(0022);
 27         close(STDIN_FILENO);
 28         open("/dev/null",O_RDWR);
 29         dup2(0,STDOUT_FILENO);
 30         dup2(0,STDERR_FILENO);
 31 
 32 }
 33 void main(void)
 34 {
 35         mydaemond();
 36         while(1);
 37 }

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值