守护进程【概念与实现】

全文目录

  • 概念
  • 实现

概念

守护进程(daemon)是一类在后台运行的特殊进程,用于执行特定的系统任务。很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭。另一些只在需要的时候才启动,完成任务后就自动结束。 —— 来自百度百科 来自百度百科 来自百度百科

进程除了 p i d pid pid p p i d ppid ppid ,还有个 组 I D ( p g i d ) 组ID(pgid) IDpgid ,同时创建的多个进程可以成为一个进程组,组长一般是第一个进程。

在登录操作时,会生成一个bash和多个进程组来提供服务(其中bash自成一组),这些进程都属于同一个会话机制。

守护进程是不会直接与终端交互的,自成一个会话,同时不能是一个进程组的组长。

实现

  1. 避免成为组长:

只需要不是第一个创建的进程即可,fork() 函数解决这个问题。创建子进程后父进程退出使其子进程以孤儿进程的状态运行。

  1. 在子进程中创建会话

setsid() 函数:用于创建一个新的会话,并担任该会话组的组长。调用setsid仃三个作用:让进程摆脱原会话的控制、让进程摆脱原进程组的控制和让进程摆脱原控制终端的控制。

前提条件:该进程不是组长。

  1. 关闭或者重定向标准输出和标准输入

文件黑洞:/dev/null

该文件会将就收到的文件全部丢弃,所以可以将重定向到该文件中实现与终端0交互。

  1. 关闭文件描述符

fork新建的子进程会从父进程那里继承一些已经打开了的文件。这些被打开的文件可能永远不会被守护进程读或写,但它们一样消耗系统资源,可能导致所在的文件系统无法卸载。

你可能感兴趣的:(Linux,c++,linux)