创建守护进程fork一次与fork两次的区别
来源:互联网 发布:手机字体放大软件 编辑:程序博客网 时间:2024/05/17 04:58
1、守护进程的特点
1.1、独立于控制终端。
1.2、父进程是1号进程(init),所以守护进程也是孤儿进程
1.3、守护进程是独自成组进程的。
1.4、守护进程独自成一个成为会话的会话首进程,或者是一个会话中的某个进程组。
1.5、守护进程的运行不受用户登录和注销的影响。
2、为什么要有守护进程???
控制终端因为某些原因会发送一些信号,接受到信号的进程去执行这些信号的默认处理动作会导致进程退出。这就使得进程不能正常的处理某些任务,所以就需要像守护进程这样接受不到信号的进程。让进程独立与控制终端,执行某些任务或处理某些事件。
3、创建一个简单的守护进程
步骤:
1、调用umask将权限掩码设置为0
2、调用fork,父进程退出,保证子进程不会使一个进程组的组长。
3、调用setsid创建一个新的会话。(还可以再fork一次)
4、将当前创建目录改为根目录
5、关闭不需要的文件描述符。(守护进程独立于控制终端)
6、忽略SIGCHLD信号。
//fork一次
#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<sys/types.h>#include<sys/stat.h>#include<signal.h>void mydaemon(){ umask(0); if(fork()>0) exit(1); setsid(); chdir("/"); close(0); close(1); close(2); signal(SIGCHLD,SIG_IGN);}int main(){ mydaemon(); while(1) { sleep(1); } return 0;}
结果:
可以看到,进程组id和会话id与pid相同。
//fork两次#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<sys/types.h>#include<sys/stat.h>#include<signal.h>void mydaemon(){ umask(0); if(fork()>0) exit(1); setsid(); if(fork()>0) exit(1); chdir("/"); close(0); close(1); close(2); signal(SIGCHLD,SIG_IGN);}int main(){ mydaemon(); while(1) { sleep(1); } return 0;}
结果:
可以看到,进程组id和会话id都与pid不同。
4、创建守护进程的时候fork一次与fork两次有什么区别
实际上创建守护进程的过程中fork一次可以,fork两次也可以。最主要的区别就是fork一次的话守护进程pid和gid和sid都是相同的,表示当前守护进程自成会话,自成进程组。而fork两次的话,pid与gid和sid不同,这表明守护进程是属于某个会话,属于某个进程组。
可以看到,fork两次的话,会使得守护进程更加安全。
3 3
- 创建守护进程fork一次与fork两次的区别
- 守护进程 & 创建守护进程 & fork一次和fork两次的区别
- 守护进程 & 创建守护进程 & fork一次和fork两次的区别
- 守护进程&创建守护进程&fork一次和fork两次的区别
- 守护进程中fork一次与两次的区别
- Linux——守护进程(精灵进程)创建fork一次.两次的区别
- 详解守护进程的创建与fork两次分析
- Linux--进程组,会话,精灵进程(fork一次与fork两次的区别)
- 守护进程(精灵进程)&调用fork一次和两次的区别
- 创建守护进程为什么fork两次
- 创建守护进程为什么fork两次
- 创建守护进程以及为什么fork两次
- 创建守护进程为什仫要fork两次
- 创建守护进程为什么要fork两次
- 创建守护进程为何fork两次
- 守护进程以及fork两次的问题
- 【Linux】如何创建daemon进程&fork一次和fork两次有什么区别
- daemon进程fork一次和fork两次区别
- [POJ 1185]炮兵阵地(状压DP)
- 文章标题
- 常见几种导致内存泄露的不良写法
- 练习系统 实验二 字符串判等
- Lighthouse 激光定位技术开源了,但不是 Valve 做的
- 创建守护进程fork一次与fork两次的区别
- jdk和tomcat配置
- Android 混淆配置
- Lesson29 Taxi!
- 【数据抓取】模拟登陆
- 认识div在排版中的作用
- 考研复试系列——第一节 文件操作
- Codeforce
- 最长单调递增子序列(LIS)