linux的守护进程本质是为服务器的后台做日志的 什么是日志呢 就是保留信息的 用数据库 比如学生的姓名 年龄等等 还有时间 许多数据库的table 并且不断的及时更新 由客户端的输入信息
linux的守护进程注意一点要彻底脱离当前父进程所在的控制终端和会话组 为了保持独立性
守护进程其实本质就是个孤儿进程 因为他在后台运行 我们在使用这个后台进程的时候 需要注意一个问题 因为父进程是进程组组长 所以不能进行创建新的会话组 sid ,所以只能是通过子进程进行创建守护进程
- 在后台运行。
为避免挂起控制终端将Daemon放入后台执行。方法是在进程中调用fork使父进程终止,让Daemon在子进程中后台执行。
if(pid=fork())
exit(0);//是父进程,结束父进程,子进程继续 - 脱离控制终端,登录会话和进程组
有必要先介绍一下Linux中的进程与控制终端,登录会话和进程组之间的关系:进程属于一个进程组,进程组号(GID)就是进程组长的进程号(PID)。登录会话可以包含多个进程组。这些进程组共享一个控制终端。这个控制终端通常是创建进程的登录终端。
控制终端,登录会话和进程组通常是从父进程继承下来的。我们的目的就是要摆脱它们,使之不受它们的影响。方法是在第1点的基础上,调用setsid()使进程成为会话组长:
setsid();
说明:当进程是会话组长时setsid()调用失败。但第一点已经保证进程不是会话组长。setsid()调用成功后,进程成为新的会话组长和新的进程组长,并与原来的登录会话和进程组脱离。由于会话过程对控制终端的独占性,进程同时与控制终端脱离。 - 禁止进程重新打开控制终端
现在,进程已经成为无终端的会话组长。但它可以重新申请打开一个控制终端。可以通过使进程不再成为会话组