[linux] C语言Linux系统编程-做成守护进程详解编程语言
2023-06-13 09:20:37 时间
必须是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; }
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/12512.html
cjavalinux相关文章
- 赵小明精解Linux教程(赵小明版linux教程)
- Linux 下添加多个用户实现一键操作(linux添加多个用户)
- Linux下如何查询端口占用的进程(linux查询端口的进程)
- C语言在Linux中实现随机数产生(c语言随机数linux)
- Linux实现组播路由技术研究(linux组播路由)
- Linux进程线程调度:实现更有效的系统运行(linux进程线程调度)
- Linux中快速获取进程列表的方法(linux获取进程列表)
- Linux环境下字符编码探究(linux编码集)
- Linux分支:探索系统的新可能(linux的分支)
- Linux网卡驱动编程技术实战篇(linux网卡驱动编写)
- 学习深入Linux:借助虚拟机学习(虚拟机深度linux)
- Linux内核的初始化过程(linux内核init)
- Linux进程状态查看实战(linux进程查看状态)
- 用户名控制 Linux 系统的进程(linux 进程 用户名)
- Linux下查看进程信息的命令总结(linux 显示进程命令)
- PC集群在Linux下的应用(pc集群 linux)
- Linux查看组下所有用户的方法(linux查看组下用户)
- 通信方式Linux下进程间通信方式(linux 进程间)
- 红帽企业 Linux:开源操作系统的可靠选择。(红帽企业linux)
- Linux进程间交流:以信号传递信息(linux进程间通信信号)
- Linux中管理日期变量的实用方法(linux日期变量)
- 数据Linux安装过程中如何保留数据(linux安装保留)
- 查看Linux系统中CPU型号的方法(查看cpu型号linux)