守护进程

我们今天来谈谈守护进程那些事~~~


一、什么是守护进程

       守护进程也称为精灵进程,它是在后台运行的一种特殊进程,它独立于控制终端,自成进程组,自成会话,它在后台周期性地执行某种任务或者等待某种事件的发生。

       在Linux中,操作系统与用户的交流是通过终端来联系的,从此开始运行的进程都与这个终端关联起来,一旦这个终端关闭了,运行的进程也就随之关闭了,但是守护进程就突破了这种限制,它独立于终端也就意味着跟终端没有联系,它运行的信息不会在终端显示,终端的消息也不会对它产生影响。

二、如何创建一个守护进程

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

2. 调用fork创建子进程,让父进程退出。原因:保证子进程不是一个进程组的组长;

3. 调用setsid创建一个会话。这样会产生三个结果:a:调用进程成为新会话的首进程;b:调用进程成为一个进程组的组长进程;c:调用进程没有控制终端。

4. 将当前工作目录更改为根目录;

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

6. 忽略SIGCHLD信号。







为什么可以fork一次也可以fork两次?

       第一次fork的作用是让shell认为这条命令已经终止,不用挂在终端输入上,还有就是为了后面的setsid服务,因为调用setsid函数的进程不能是进程组组长,如果不fork出子进程,则此时的父进程是进程组组长,就无法调用setsid。当子进程调用完setsid函数之后,子进程是会话组长也是进程组组长,并且脱离了控制终端,此时,不管控制终端如何操作,新的进程都不会收到一些信号使得进程退出。

       虽然当前关闭了和终端的联系,但是后期可能会误操作打开了终端。只有会话首进程能打开终端设备,也就是再fork一次,再把父进程退出,再次fork的子进程作为守护进程继续运行,保证了该精灵进程不是对话期的首进程,第二次不是必须的,是可选的。

系统也提供了创建守护进程的方法,daemon()第一个参数表示是否需要变更根目录,第二个参数表示是否需要关闭文件描述符。



三、查看守护进程

使用ps axj可以查看系统中的守护进程,可以发现TTY这一列是?,表示没有终端。

在创建守护进程时,让父进程退出了,所以守护进程也是孤儿进程被1号进程领养。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值