[linux] C语言Linux系统编程-做成守护进程
2018-06-18 03:56:10来源:未知 阅读 ()
守护进程:
必须是init进程的子进程,运行在后台,不与任何控制终端相关联。
通过以下步骤成为守护进程
1.调用fork()创建出来一个新的进程,这个新进程会是将来的守护进程
2.在新守护进程的父进程中,调用exit(),为了守护进程的爷爷进程确认父进程结束
3.在新守护进程中,调用setsid(),使得该进程有一个新的进程组和新的会话,保证了该进程不与控制终端相关联
4.用chdir()将当前工作目录改为根目录,因为前面fork出来的新进程,当前工作目录可能在文件系统的任何地方
5.关闭所有文件描述符
6.打开 0 1 2号文件描述符(标准输入,标准输出,标准错误),把它们重定向到/dev/null
#include <sys/types.h> #include <sys/stat.h> #include <stdlib.h> #include <stdio.h> #include <fcntl.h> #include <unistd.h> #include <linux/fs.h> int main(){ int ret; //创建新进程 ret=fork(); //创建失败的直接返回 if(ret<0){ return -1; } //父进程直接结束 if(ret>0){ exit(EXIT_SUCCESS); } //创建新的进程组和会话 ret=setsid(); //失败的直接返回 if(ret<0){ return -1; } //改变当前工作目录 chdir("/"); //关闭所有文件描述符 //标准输入输出重定向到/dev/null //NR_FILE 是系统在某一给定时刻,限制的文件总数 for(int i=0;i<NR_FILE;i++){ close(i); } open("/dev/null",O_RDWR); dup(0); dup(0); //下面可以写自己的操作... while(1){ sleep(1); } return 0; }
自带函数:daemon();
原型 int daemon(int nochdir,int noclose)
nochdir为0 改为根目录,noclose为0 关闭所有文件描述符
daemon(0,0)
#include <sys/types.h> #include <sys/stat.h> #include <stdlib.h> #include <stdio.h> #include <fcntl.h> #include <unistd.h> #include <linux/fs.h> int main(){ daemon(0,0); //下面可以写自己的操作... while(1){ sleep(1); } return 0; }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 关于各种不同开发语言之间数据加密方法(DES,RSA等)的互通的 2020-06-07
- C语言程序结构 2020-05-31
- Building & Debugging chromium on CLion for Linu 2020-05-19
- 每日干货丨C++语言主流开发工具推荐! 2020-04-28
- C语言实现经典游戏——扫雷! 2020-04-17
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash