linux基础之守护进程

本文介绍了Linux系统中的守护进程,它们是独立于控制终端并持续运行的服务进程,如inetd和httpd。守护进程的主要职责是确保指定进程的运行,例如在软件崩溃时重启。创建守护进程涉及调用setsid函数、改变工作目录、关闭不必要的文件描述符等步骤。文中还提供了两种不同的守护进程创建代码示例,并讨论了如何通过心跳检测或看门狗机制来监控和恢复守护进程。
摘要由CSDN通过智能技术生成

一.守护进程(Daemon)

1.关于守护进程

守护进程,顾名思义,也就是专门守护一个进程的进程。守护进程的职责就是专门确保被指定的进程的运行。
守护进程也称精灵进程(Daemon),是运行在后台的一种特殊进程。它独立于控制终端,并且周期性的执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进程,linux的大多数服务器就是用守护进程实现的。比如:Internet服务器inetd。Wed服务器httpd等。同时,守护进程完成了许多系统任务。比如,作业规划进程crond等。

linux系统启动时会启动很多系统服务进程,这些服务进程没有控制终端,不能和用户交互。其他进程都是在用户登录或运行程序时创建,在运行结束或用户注销时终止,但是系统服务进程不受用户登录注销的影响,他们一直在运行着。这种进程的名称叫做守护进程。


最直接的应用就是重启进程。如果我们的软件崩溃了,为了让软件重新运行起来,软件本身是无法不方便或者无法做到的。因为出故障就是软件本身,而这个故障严重到迫使软件本身挂掉了,自然也没有办法重启自己了。
那么可以借助一个专门的进程来帮助自己启动咯。守护进程当然不仅限于重启进程咯。要实现什么守护功能,就看你怎么实现了。你可以守护进程不被关闭,重启进程,也可以守护进程的网络,必要的配置文件等等。
守护进程好比是保镖,被守护的进程就是保镖保护的对象。守护进程在很多地方都会有应用

二.创建守护进程

1. 关于setsid函数

创建守护进程最关键一步是调用setsid函数创建一个新的Session,并成为Session Leader。

#include<unistd.h>
pid_t setsid(void);
  • 该函数调用成功时返回新创建的Session的id(其实也就是当前进程的id),出错返回-1。注意:调用这个函数之前,当前进程不允许是进程组的Leader,否则该函数返回-1。要保证当前进程不是进程组的Leader很容易,只要先fork再调用setsid就行了。fork的子进程和父进程在同一个进程组中,进程组的Leader必然是该进程组的第一个进程,所以子进程不可能是该组的第一个进程,所以在子进程中调用setsid是一定不会有问题的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值