当前位置: 首页 > java >正文

守护进程

守护进程也称精灵进程( Daemon),是运行在后台的⼀一种特殊进程。它独立于控制终端并 且周期性地执行某种任务或等待处理某些发生的事件。守护进程是⼀一种很有用的进程。 Linux的⼤大多数服务器就是⽤用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd 等。同时,守护进程完成许多系统任务。比如,作业规划进程crond等 Linux系统启动时会启动很多系统服务进程,这些系统服 务进程没有控制终端,不能直接和用 户交互。其它进程都是在⽤用户登录或运⾏行程序时创建,在运行结束或⽤用户注销时终止,但系统 服务进程不受⽤用户登录注销的影响,它们⼀一直在运行着。这种进程有⼀一个名称叫守护进程 (Daemon)。
守护进程自己就是一个会话
这里写图片描述
创建守护进程:
1、先使用umask将文件模式屏蔽字设置为0
2、调用fork,父进程退出(exit)。原因:1)如果该守护进程是作为⼀一条简单的shell命令 启动的,那么父进程终止使得shell认为该命令已经执行完毕。2)保证子进程不是一个进程组的组长进程。
3、 调⽤用setsid创建一个新会话。setsid会导致:1)调用进程成为新会话的首进程。 2)调用 进程成为⼀一个进程组的组长进程 。3)调⽤用进程没有控制终端。(再次fork一次,保证 daemon进程,之后不会打开tty设备)
4. 将当前⼯工作⽬目录更改为根⽬目录。 5. 关闭不在需要的⽂文件描述符。 6. 其他:忽略SIGCHLD信号。


#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<signal.h>
void mydaemon()
{umask(0);if(fork() >0){exit(0);}else if(fork()<0){return ;}setsid();chdir("/");close(0);close(1);close(2);signal(SIGCHLD,SIG_IGN);}
int  main()
{mydaemon();while(1){}return 0; 
}

这里写图片描述
为什么创建守护进程要fork两次?
虽然当前关闭了和终端的联系,但是后期可能会误操作打开了终端。
只有会话首进程能打开终端设备,也就是再fork一次,再把父进程退出,再次fork的子进程作为守护进程继续运行,保证了该精灵进程不是对话期的首进程。

http://www.xdnf.cn/news/11303.html

相关文章:

  • 对称加密与非对称加密
  • 一区即将要洗的DVD片子
  • 【安全】简单解析统一身份认证:介绍、原理和实现方法
  • 一文搞懂程序流程图详解
  • 使用webrtc-streamer查看实时监控
  • js常用四舍五入方法
  • caffe的用法
  • Mint UI - 饿了么出品的开源、轻量的移动端 UI 组件库
  • SecureCRT 64位安装与破解
  • 【并发编程】 --- CyclicBarrier原理简介 + 使用方法
  • C语言入门到精通,这一篇就够了(13万字笔记)
  • 【集合篇】Java集合概述
  • 主流压缩软件压缩率实测(图文详解,揭秘你不知道的)
  • little-loader 开源项目教程
  • 2、CSS 文本
  • canvas的drawImage方法参数详解
  • 【STK】手把手教你利用STK进行仿真-STK软件简介01STK基本模型
  • openlayers [四] 地图图层 Layers详解
  • MPM
  • ownCloud 的六大神奇用法
  • matlab plot 数组,matlab plot基本用法
  • Ubuntu Dockers安装与基本使用
  • 【数据库】数据库索引介绍和使用
  • 使用事件日志识别常见 Windows 错误
  • 今天给大家介绍一下什么是alkaline电池
  • 网络安全最新小白必学:msf基本使用_msf监听,2024年最新疯狂膜拜
  • 层次分析法(AHP))
  • 哈夫曼树(赫夫曼树、最优树)详解
  • wubi安装linux工具,Wubi下载_Wubi(Ubuntu辅助安装工具)正式版13.10 - 系统之家
  • ehcache使用及缓存不生效处理方法