守护进程创建过程

(1)屏蔽一些有关控制终端操作的信号。这是为了防止在守护进程没有正常没有正常运行起来前,控制终端受到干扰退出或挂起。实现代码如下:

          signal(SIGTTOU,SIG_IGN);

          signal(SIGTTOU,SIG_IGN);

          signal(SIGTSTP,SIG_IGN);

           signal(SIGHUP,SIG_IGN);

(2)在后台运行。这是为了避免挂起控制终端将其放入后台执行。方法是在进程中调用fork使父进程终止,让其子进程在后台执行。实现代码如下:

           if(pid=fork())

                   exit(0);

(3)脱离控制终端和进程组。因为进程属于一个进程组,进程组号(PGID)就是进程组长的进程号(PID)。同时进程组中的进程共享一个控制终端,这个控制终端通常就是创建进程的shell登录终端。而控制终端和进程组通常是从父进程继承下来的。需要摆脱他们,使之不受他们的影响。因此需要调用setid()使子进程成为新的会话组长,实现代码如下:

              setid();

(4)禁止进程重新打开一个控制终端。

             if(pid=fork())

                        exit(0);


(5)关闭打开的文本件描述符。

            for(i=0;i

                       close(i);

(6)改变当前工作目录。

             chdir(“/”);

(7)重设文件创建掩模。

                 umask(0);

(8)处理SIGCHLD信号(子进程退出信号)。防止在子进程结束时产生僵尸进程。

              signal(SIGCHLD,SIG_IGN);

经过8个步骤一个守护进程就创建好了。

你可能感兴趣的:(守护进程创建过程)