吴忠网站建设多少钱,苏州网站建设运营推广,浙江十大外贸公司排名,中山 在门户网站推广一、守护进程守护进程#xff0c;也叫精灵进程#xff08;daemon#xff09;它和普通后台进程的区别在于以下三点1、守护进程自成会话#xff0c;而普通后台进程则不一定2、守护进程不受终端的控制3、守护进程就是后台进程#xff0c;而后台进程不同于守护进程用ps axj命令… 一、守护进程守护进程也叫精灵进程daemon 它和普通后台进程的区别在于以下三点1、守护进程自成会话而普通后台进程则不一定2、守护进程不受终端的控制3、守护进程就是后台进程而后台进程不同于守护进程 用ps axj命令查看系统中的进程TPGID一栏为 -1 的进程这些进程没有控制终端就是守护进程。 二、实现创建守护进程的步骤如下1、调用umask把【文件模式创建屏蔽字】 设置为 0 由于 umask 接收的参数会被取反所以这个 0 传进去取反以后是最大的也就是给该程序最大的权限2、先fork然后让父进程退出 这是因为要设置成守护进程的进程不能使原进程组中的组长进程所以fork的目的是创建一个子进程这样这个子进程一定不会是组长进程然后父进程就没什么用了。3、调用 setid 创建一个新会话 这时这个进程会成为新会话的首进程也是组长进程4、将当前工作目录改成根目录5、关闭不需要的文件描述符6、忽略SIGCHILD信号 实现代码如下 运行后执行 ps axj找到刚刚的进程 同时还可以看到它的父进程是 1 号进程因此守护进程也是孤儿进程 不过这里要注意的是实际使用的时候并不需要我们造这个轮子了 有现成的函数daemon(0, 0) 就可以让当前的进程变为孤儿进程 三、fork()两次的原因通常daemon的实现跟上面的实现方式还有一处不同fork() 调用了两次让后将第二个fork 创建出来的子进程作为守护进程。 这是因为如果只fork一次的话那么有可能有这样的情况 第一次fork之后父进程脱离这时候子进程成为话首进程子进程有可能会再打开一个控制终端一旦这种事情发生该进程就不再是守护进程了因为它又一次受到终端的控制了 因此如果再fork一次那么这次得到的子进程将不可能是话首进程因此不可能再打开终端了所以通常用这个第二次fork出的子进程作为守护进程 转载于:https://blog.51cto.com/zhweizhi/1828211