linux 守护进程(daemon process)代码-详细注释
1、 进程组 组长不能创建新的 会话。
其它进程可以创建新的会话,创建后既成为会话首领,同时失去控制终端。
2、 会话首领可以重新打开控制终端
1 #include <stdio.h>
2 #include <unistd.h>
3 #include <stdlib.h>
4 #include <sys/param.h>
5 #include <sys/stat.h>
6 #include <sys/types.h>
7 #include <fcntl.h>
8 #include <signal.h>
9
10 void my_daemon() {
11 int pid, fd;
12
13 // 1.转变为后台进程
14 if ((pid = fork()) == -1) exit(1);
15 if (pid != 0) exit(0); // 父进程(前台进程)退出
16
17 // 2.离开原先的进程组,创建一个新会话,并脱离原终端。原终端断开后会通知原会话的控制进程,并不会通知此会话
18 if (setsid() == -1) exit(1); // 开启一个新会话,此PID为会话首进程
19
20 // 3.会话首进程,有权利再次连接终端。再fork一次,会话首进程退出,禁止子进程再次打开控制终端
21 if ((pid = fork()) == -1) exit(1);
22 if (pid != 0) exit(0); // 父进程(会话领头进程)退出
23
24 // 4.关闭打开的文件描述符,避免浪费系统资源
25 for (int i = 0; i < NOFILE; i++)
26 close(i);
27
28 // 5.改变当前的工作目录,避免卸载不了文件系统
29 if (chdir("/") == -1) exit(1);
30
31 // 6.重设文件掩码,防止某些属性被父进程屏蔽
32 if (umask(0) == -1) exit(1);
33
34 // 7.重定向标准输入,输出,错误流,因为守护进程没有控制终端
35 if ((fd = open("/dev/null", O_RDWR)) == -1) exit(1); // 打开一个指向/dev/null的文件描述符
36 dup2(fd, STDIN_FILENO);
37 dup2(fd, STDOUT_FILENO);
38 dup2(fd, STDERR_FILENO);
39 close(fd);
40
41 // 8.本守护进程的子进程若不需要返回信息,那么交给init进程回收,避免产生僵尸进程
42 if (signal(SIGCHLD, SIG_IGN) == SIG_ERR) exit(1);
43 }
44
45 #define INTERVAL 2
46
47 int main(int argc, char *argv[]) {
48 my_daemon(); // 首先使之成为守护进程
49
50 int t = 0;
51 FILE *fp = fopen("/root/tmp.txt", "a");
52 fprintf(fp, "ppid = %d, pid = %d, sid = %d, pgrp = %d\n", getppid(), getpid(), getsid(0), getpgrp());
53 fflush(fp);
54
55 do { // 测试此后台进程,每INTERVAL秒打印当前时间t,30秒后退出此后台进程
56 fprintf(fp, "%d\n", t);
57 fflush(fp); // 输出缓冲区内容到文件中
58 sleep(INTERVAL);
59 t += INTERVAL;
60 } while(t < 30);
61
62 fclose(fp);
63
64 return 0;
65 }
保存为daemon.c
编译命令 gcc daemon.c
运行 ./a.out
查看tmp.txt文件内容 cat /root/tmp.txt
linux 守护进程(daemon process)代码-详细注释的更多相关文章
- linux 守护进程 daemon
Linux的Service/Daemon你真的懂了吗? Linux 守护进程的启动方法 linux系统编程之进程(八):守护进程详解及创建,daemon()使用 linux守护进程 daemon 详解
- .NET跨平台实践:用C#开发Linux守护进程-Daemon
Linux守护进程(Daemon)是Linux的后台服务进程,它脱离了与控制终端的关联,直接由Linux init进程管理其生命周期,即使你关闭了控制台,daemon也能在后台正常工作. 一句话,为L ...
- Linux守护进程daemon
守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程.它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.守护进程常常在系统引导装入时启 ...
- flask使用debug模式时,存在错误时,会占用设备内存直至服务重启才释放;debug模式会开启一个守护进程(daemon process)
函数调用顺序flask的app.py的run-->werkzeug的serving.py的run_simple-->调用werkzeug的debug的__init__.py里的类Debug ...
- .NET跨平台实践:.NetCore、.Net5/6 Linux守护进程设计
之前,我写过两篇关于用C#开发Linux守护进程的技术文章,分别是<.NET跨平台实践:用C#开发Linux守护进程>和<.NET跨平台实践:再谈用C#开发Linux守护进程 - 完 ...
- CentOS 7.4 初次手记:第一章 Linux守护进程(daemon)
第一节 init & sysvinit 6 I sysvinit 运行顺序... 6 II Sysvinit和系统关闭... 7 III Sysvinit 的小结... 7 IV 运行级别.. ...
- 【转】学习Linux守护进程详细笔记
[原文]https://www.toutiao.com/i6566814959966093837/ Linux守护进程 一. 守护进程概述 守护进程,也就是通常所说的Daemon进程,是Linux中的 ...
- 笔记整理--Linux守护进程
Linux多进程开发(三)进程创建之守护进程的学习 - _Liang_Happy_Life__Dream - 51CTO技术博客 - Google Chrome (2013/10/11 16:48:2 ...
- .NET跨平台实践:用C#开发Linux守护进程
Linux守护进程(Daemon)是Linux的后台服务进程,它脱离了与控制终端的关联,直接由Linux init进程管理其生命周期,即使你关闭了控制台,daemon也能在后台正常工作. 一句话,为L ...
随机推荐
- 068——VUE中vuex的使用场景分析与state购物车实例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- LInux内核分析--使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
实验者:江军 ID:fuchen1994 实验描述: 选择一个系统调用(13号系统调用time除外),系统调用列表参见http://codelab.shiyanlou.com/xref/linux-3 ...
- 扫描系统句柄表(WIN7 x86)(附录源码)
PspCidTable存放着系统中所有的进程和线程对象,其索引也就是进程ID(PID)或线程ID(TID).先通过它来看看windbg里的HANDLE_TABLE结构: 可以看到地址 0x83f41b ...
- 深入理解Linux网络技术内幕——用户空间与内核空间交互
概述: 内核空间与用户空间经常需要进行交互.举个例子:当用户空间使用一些配置命令如ifconfig或route时,内核处理程序就要响应这些处理请求. 用户空间与内核有多种交互方式,最常 ...
- L235
China will launch the Chang'e-5 probe by the end of this year to bring moon samples back to Earth, a ...
- 数据库SQL优化大总结之 百万级数据库优化方案(转载)
网上关于SQL优化的教程很多,但是比较杂乱.近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请大家纠正补充. 这篇文章我花费了大量的时间查找资料.修改.排版,希望大家阅读之后,感觉 ...
- Python_常用的正则表达式处理函数
正则表达式就是用查找字符串的,它能查找规则比较复杂的字符串反斜杠:正则表达式里面用"\"作为转义字符. s='<a class="h3" href=&qu ...
- 多重条件判断SQL:用于用户名称,密码,权限的检测和判断
string sqlstr = "select count(*) from tb_admin where 用户名='"+UserName+"'and 密码='" ...
- NBUT 1225 NEW RDSP MODE I 2010辽宁省赛
Time limit 1000 ms Memory limit 131072 kB Little A has became fascinated with the game Dota recent ...
- 【ssm】拦截器的原理及实现
一.背景: 走过了双11,我们又迎来了黑色星期五,刚过了黑五,双12又将到来.不管剁手的没有剁手的,估计这次都要剁手了!虽然作为程序猿的我,没有钱但是我们长眼睛了,我们关注到的是我们天猫.淘宝.支付宝 ...