自己创建守护进程

        创建守护进程有两种方式,一种是通过系统提供的函数实现,另一种是模仿函数的底层实现。

(一)自己创建

1.调用umask将文件模式创建屏蔽字设置为0

2.调用fork,并且父进程退出

3.调用setsid创建一个新的会话

4.将当前工作目录改成根目录。

5.关闭不再需要的文件描述符。

6.其他:忽略SIGCHLD信号

以下是自己写的守护进程:

运行结果如下:




二)调用函数的方法

#include <stdio.h>
#include<unistd.h>
int main()
{
daemon(0,0);
while(1);
}

三)关于有时候创建守护进程需要两次fork的原因

1 、第一次fork的作用是让shell 认为本条命令 已经终止,不用挂在终端输入上。还有一个作用是为后面setsid服务。setsid的调用者不能是进程组组长(group leader). 此时父进程是进程组组长。

2、第2次fork不是必须的。也看到很多开源服务没有fork第二次。fork第二次主要目的是。防止进程再次打开一个控制终端。因为打开一个控制终端的前台条件是该进程必须是会话组长。再fork一次,子进程ID != sid(sid是进程父进程的sid)。所以也无法打开新的控制终端。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值