守护进程

守护进程

所谓守护进程就是7*24小时一直运行在服务器端不受登录、注销影响。也称精灵进程。
守护进程自成组自成会话。
这里有一点需要说明,后台作业并非守护进程,后台进程是指会话内部的作业,当关闭会话时会话内部所有后台作业都会结束而守护进程自成会话,所以不受影响。
**创建**一个守护进程需要调用setsid命令,但这条命令不能由该组组长调用,所以在创建后台进程时应先fork子进程,然后让子进程调用setsid。
守护进程代码示例如下:
  1 #include<stdio.h> 
  2 #include<unistd.h> 
  3 #include<stdlib.h> 
  4 #include<signal.h> 
  5  
  6 void mydaemon() 
  7 { 
  8     umask(0); 
  9     if(fork() > 0){ 
 10         exit(0); 
 11     } 
 12         setsid(); 
 13         chdir("/"); 
 14         close(0); 
 15         close(1); 
 16         close(2); 
 17         signal(SIGCHLD, SIG_IGN); 
 18 } 
 19 int main() 
 20 { 
 21     mydaemon(); 
 22     return 0; 
 23 }

创建守护进程时应注意:
1.调用umask将文件模式创建屏蔽字设置为0。
2.调用fork,父进程退出exit。
3.调用setsid创建一个新会话。
setsid会导致:
1)调用进程成为新会话首进程。
2)调用进程成为一个进程组的组长进程。
3)调用进程没有控制终端。
4.将当前工作目录更改为根目录。
5.关闭不再需要的文件描述符。
6.其他:忽略SIGCHID信号。
再创建守护进程的时候有人fork两次,是因为在调用完setsid后,再次fork一次,保证daemon进程,之后不会打开tty设备。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值