admin管理员组文章数量:1516870
守护进程
守护(精灵)进程,是Linux中的后台服务进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。其没有控制终端,不能直接和用户交互,不受用户登录、注销的影响。
创建过程如下:
- 创建子进程,父进程退出,脱离控制终端;
- 子进程中创建新会话,这个步骤是创建守护进程中最重要的一步,在这里使用的是系统函数setsid。
setsid函数用于创建一个新的会话,并担任该会话组的组长。调用setsid的三个作用:让进程摆脱原会话的控制、让进程摆脱原进程组的控制和让进程摆脱原控制终端的控制; - 改变当前工作目录为非挂载目录,用chdir()函数,其目的是为了防止占用挂载目录;
- 重设文件权限掩码,用umask()函数;
- 关闭文件描述符,继承的打开文件不会用到,浪费系统资源,无法卸载,如fd[0](标准输入),fd[1](标准输出),fd[2](标准错误输出),因为守护进程无用户交互过程,所以可以关闭这些描述符。
代码如下:
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>int main(void)
{pid_t f_pid = fork();if (f_pid < 0) {return -1;} else if (f_pid!= 0) {return 0;}setsid();if (chdir("/") < 0){return -1;}umask(0);close(0);int fd = open("/dev/null", O_RDWR);dup2(fd , 1);dup2(fd , 2);do{//守护进程业务}while(1);
}
本文标签: 守护进程
版权声明:本文标题:守护进程 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.betaflare.com/biancheng/1730780013a1516304.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论