守护进程(daemon)是一类在后台运行的特殊进程,用于执行特定的系统任务。很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭。另一些只在需要的时候才启动,完成任务后就自动结束。 —— 来自百度百科 来自百度百科 来自百度百科
进程除了 p i d pid pid 与 p p i d ppid ppid ,还有个 组 I D ( p g i d ) 组ID(pgid) 组ID(pgid) ,同时创建的多个进程可以成为一个进程组,组长一般是第一个进程。
在登录操作时,会生成一个bash和多个进程组来提供服务(其中bash自成一组),这些进程都属于同一个会话机制。
守护进程是不会直接与终端交互的,自成一个会话,同时不能是一个进程组的组长。
只需要不是第一个创建的进程即可,fork() 函数解决这个问题。创建子进程后父进程退出使其子进程以孤儿进程的状态运行。
setsid() 函数:用于创建一个新的会话,并担任该会话组的组长。调用setsid仃三个作用:让进程摆脱原会话的控制、让进程摆脱原进程组的控制和让进程摆脱原控制终端的控制。
前提条件:该进程不是组长。
文件黑洞:/dev/null
该文件会将就收到的文件全部丢弃,所以可以将重定向到该文件中实现与终端0交互。
用fork新建的子进程会从父进程那里继承一些已经打开了的文件。这些被打开的文件可能永远不会被守护进程读或写,但它们一样消耗系统资源,可能导致所在的文件系统无法卸载。