daemon
来源:互联网 发布:sql删除数据的语句 编辑:程序博客网 时间:2024/06/09 01:27
守护进程是一个很重要的概念,但本质上就是一个去除所有可知的依赖以保持独立的进程,说的再多不如动手来一遍。
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/stat.h>#include <sys/types.h>#include <fcntl.h>#include <syslog.h>void create_daemon_by_self(void){ pid_t pid_t1; int ret = -1; long fd_max = -1; pid_t1 = fork(); //fork一个新进程 if(pid_t1 < 0) { perror("fork"); exit(0); } if(pid_t1 > 0) { printf("end parent process.\n"); //结束父进程 exit(0); } pid_t1 = setsid(); //设置新的会话 if(pid_t1 < 0) { perror("setsid"); exit(0); } ret = chdir("/"); //设置工作目录 if(ret < 0) { perror("chdir"); exit(0); } umask(0); //设置最大的文件操作权限 fd_max = sysconf(_SC_OPEN_MAX); //关闭所有的文件操作,一般关闭0,1,2就行了 for(int i = 0; i < fd_max; i++) { close(i); } open("/dev/null", O_RDWR); //把标准输入输出标准错误绑定到一个空设备 dup(0); dup(0);}void create_daemon_by_daemon(void){ int ret = -1; printf("Hi, create_daemon_by_daemon.\n"); ret = daemon(0, 0); //使用daemon接口创建守护进程,简单很多!!!! if (ret != 0) exit(0);}void do_something(void){ openlog("hello", LOG_PID | LOG_CONS, LOG_USER); int count = 10; while(count--) { sleep(1); syslog(LOG_INFO, "hello world=%d", count); } closelog();}void do_exit(void){ printf("Hi, I'm exit.\n");}int main(int argc, char const *argv[]){ atexit(do_exit); // create_daemon_by_self(); create_daemon_by_daemon(); do_something(); return 0;}
阅读全文
0 0
- daemon
- Daemon
- Daemon
- daemon
- daemon
- daemon
- daemon
- daemon
- daemon
- daemon
- daemon
- Daemon
- daemon.exe
- daemon 函数
- Daemon线程
- Daemon线程
- 什么是 daemon
- git daemon
- 欢迎使用CSDN-markdown编辑器
- Friend Numbers (20)
- mysql开启慢查询日志
- Hive中求交集和差集的两种方法
- 检查重复字符串
- daemon
- c++ 字符串读写
- Android如何使用Https
- Spark---JVM调优之调节executor离堆内存与连接等待时长
- Javascript——脚本基础
- Spark开发-WordCount详细讲解
- 基于keras的深度学习基本概念讲解
- sklearn中SVM与AdaBoost对手写体数字进行识别
- 51 nod 1503 猪和回文(双线程DP)