编写简单守护进程
2016-09-25 18:54
197 查看
《朱老师物联网大讲堂》学习笔记
学习地址:www.zhulaoshi.org
任何进程都可以将自己实现为守护进程,
creat_daemon实现,
1,子进程的父进程退出,
2,子进程使用setsid创建新的会话期,脱离控制台,
3,调用chdir将当前工作目录设置为/,这样就不依赖其它文件系统了,
4,umask设置为0,以取消任何文件权限屏蔽,
5,关闭所有文件描述符,
6,将0,1,2文件描述符定位到/dev/null,即定位到垃圾堆,
以下代码,是朱老师课上讲解实例代码,
学习地址:www.zhulaoshi.org
任何进程都可以将自己实现为守护进程,
creat_daemon实现,
1,子进程的父进程退出,
2,子进程使用setsid创建新的会话期,脱离控制台,
3,调用chdir将当前工作目录设置为/,这样就不依赖其它文件系统了,
4,umask设置为0,以取消任何文件权限屏蔽,
5,关闭所有文件描述符,
6,将0,1,2文件描述符定位到/dev/null,即定位到垃圾堆,
以下代码,是朱老师课上讲解实例代码,
#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> void create_daemon(void); int main(void) { create_daemon(); while (1) { printf("I am running.\n"); sleep(1); } return 0; } // 函数作用就是把调用该函数的进程变成一个守护进程 void create_daemon(void) { pid_t pid = 0; pid = fork(); if (pid < 0) { perror("fork"); exit(-1); } if (pid > 0) { exit(0); // 父进程直接退出 } // 执行到这里就是子进程 // setsid将当前进程设置为一个新的会话期session,目的就是让当前进程 // 脱离控制台。 pid = setsid(); if (pid < 0) { perror("setsid"); exit(-1); } // 将当前进程工作目录设置为根目录 chdir("/"); // umask设置为0确保将来进程有最大的文件操作权限 umask(0); // 关闭所有文件描述符 // 先要获取当前系统中所允许打开的最大文件描述符数目 int cnt = sysconf(_SC_OPEN_MAX); int i = 0; for (i=0; i<cnt; i++) { close(i); } open("/dev/null", O_RDWR); open("/dev/null", O_RDWR); open("/dev/null", O_RDWR); }
相关文章推荐
- 一个简单的守护进程的编写
- 创建简单的守护进程的编写规则
- 一个简单的守护进程的编写
- linux下编写简单的守护进程
- 一个简单的守护进程的编写
- 嵌入式linux系统下简单守护进程(daemon)的编写
- 编写Linux/Unix守护进程
- 编写Linux/Unix守护进程
- 如何编写linux守护进程及详细实例
- 什么是守护进程,以及如何编写
- 编写守护进程的基本步骤
- Linux的守护进程的编写
- 编写守护进程下的多线程实例
- 编写Linux/Unix守护进程
- 如何编写Linux Daemon后台程序(守护进程)
- 在windows下如何用c++编写守护进程
- 编写Linux/Unix守护进程(比较全)(转载)
- linux 一个简单守护进程实例
- linux上编写守护进程的例程
- C语言编写linux下的守护进程