守护进程的生命周期很长,并且在后台运行。编写守护进程需要遵循哪些规则? 1.执行fork()函数,父进程退出,子进程继续执行此步骤。原因有两个:父进程可能是进程组的领导者,因此无法执行稍后要执行的setsid函数。子进程继承父进程的进程组ID,并且不能成为进程组领导者,因此子进程必须能够执行setid。如果守护程序是从终端命令行启动的,则在父进程退出后,shell将显示一个shell提示,从而允许子进程在后台执行。 2.子进程执行以下三个步骤,将当前目录修改为根目录。如果当前工作路径包含除根文件系统以外的文件系统,则无法卸载该文件系统。当然,也可以将其更改为其他合适的目录。这里使用函数chdir(“ /”)。调用setsid是为了切断与控制终端的所有关系并创建一个新会话。此时,终端是发送SIGIN,SIGQUIT还是SIGTSTP还是断开连接,都与守护进程无关。使用umask(0)将文件模式创建掩码设置为0。此步骤的目的是分离守护进程的权限属性,以从shell创建文件。因为默认情况下,进程的umask来自父进程shell的umask。如果未执行umask(0),则父进程的外壳程序将影响守护程序,从而导致每次执行守护程序时umask信息不一致。 3.再次执行fork,父进程退出,子进程继续执行前两个步骤,并创建一个新会话。该流程是会话的第一个流程,也是流程组的第一个流程;进程ID,进程组ID和会话ID相同;与终端失去联系。但是距离我们仍然只有一步之遥。守护进程可以打开终端设备:intfd = open(“ / dev / console”,O_RDWR);此设备是否将成为守护进程的控制终端取决于两点:守护进程是否是会话的第一个进程。系统实施。 (BSD的实现不会成为守护程序的控制终端,但是POSIX由特定的实现决定)。为了做到万无一失,需要使用fork()来确保守护进程不是会话的第一个进程。 4.关闭stdin,stdout,stderrC库的守护程序功能与此过程类似,但是没有第二个fork。原始标题:创建Daemon进程来源:[微信官方帐号:Linux Lovers]欢迎您关注!请指出转载文章的来源。