来自http://www.steve.org.uk/Reference/Unix/faq_2.html#SEC16

以下是成为守护程序的步骤:

fork(),以便父级可以退出,这会将控制权返回给命令行或shell来调用您的程序。需要执行此步骤,以确保新流程不会成为流程组负责人。如果您是流程组负责人,则下一步,setsid()将失败。

setsid()成为进程组和会话组组长。由于控制终端与会话相关联,并且此新会话尚未获得控制终端,因此我们的进程现在没有控制终端,这对于守护程序而言是一件好事。

再次fork(),以便父级(会话组负责人)可以退出。这意味着,作为非会议小组的负责人,我们永远无法重新获得控制终端。

chdir(“ /”),以确保我们的进程不使用任何目录。如果不这样做,可能会导致管理员无法卸载文件系统,因为它是我们的当前目录。[等效地,我们可以切换到包含对守护程序的操作很重要的文件的任何目录。

umask(0),这样我们就可以完全控制所写内容的权限。我们不知道我们可能继承了什么umask。[此步骤是可选的]

close()fds 0、1和2。这将释放我们从父进程继承的标准输入,输出和错误。我们无法知道这些fds可能被重定向到了哪里。请注意,许多守护程序使用sysconf()确定限制_SC_OPEN_MAX。_SC_OPEN_MAX告诉您最大打开文件数/进程数。然后,在一个循环中,守护程序可以关闭所有可能的文件描述符。您必须决定是否需要执行此操作。如果您认为可能打开了文件描述符,则应该关闭它们,因为并发文件描述符的数量受到限制。

为stdin,stdout和stderr建立新的打开描述符。即使您不打算使用它们,将它们打开也是一个好主意。精确地处理这些只是一个问题。例如,如果您有一个日志文件,则可能希望以stdout或stderr的形式打开它,并以stdin的形式打开“ / dev / null”;或者,您可以以stderr和/或stdout的身份打开“ / dev / console”,以stdin或其他对您的特定守护程序有意义的组合形式打开“ / dev / null”。

更好的是,仅调用daemon()函数(如果可用)。

linux 守护进程 失败,Linux守护进程相关推荐

  1. linux发邮件失败,Linux SendMail发送邮件失败诊断案例,sendmail发送邮件

    Linux SendMail发送邮件失败诊断案例,sendmail发送邮件 Linux上Sendmail经常由于一些配置问题,导致邮件发送失败,下面整理.收集了一些邮件发送失败.异常的案例. 案例1: ...

  2. linux svn启动失败,linux svn authorization failed错误

    找了半天错误原因 authorization failed错误主要是conf/auth文件配置错误,可以参考如下配置: ### This file is an example authorizatio ...

  3. linux list 添加失败,linux运维实战案例之Argument list too long错误与解决方法

    1.错误现象 这是一台Mysql数据库服务器,在系统中运行了很多定时任务,今天通过crontab命令又添加了一个计划任务,退出时发生了如下报错: #crontab -e 编辑完成后,保存退出,就出现下 ...

  4. 宝塔Linux启动mongodb失败,Linux安装MongoDB启动及常见问题解决

    Linux安装MongoDB启动及常见问题解决,目录,的是,后台,运行状态,如图 Linux安装MongoDB启动及常见问题解决 易采站长站,站长之家为您整理了Linux安装MongoDB启动及常见问 ...

  5. linux开终端失败,Linux:终端提示符 (prompt) 不如期生效原因

    原标题:Linux:终端提示符 (prompt) 不如期生效原因 前言 先来简单介绍下, prompt是什么鬼? 顾名思义就是提示符的意思, 看起来和我们遥远, 但实际上只要是每个接触 shell的童 ...

  6. linux iconv函数失败,Linux 编码转换 (iconv失败的解决方法)

    一开始,调用iconv_open()会返回-1,使用printf("errno=%d\n",errno)查看,返回22,说是invalid argument参数非法. 试了下,确定 ...

  7. linux 安装git失败,Linux运维知识之linux下安装git常见故障整理

    本文主要向大家介绍了Linux运维知识之linux下安装git常见故障整理,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助. FAQ1: Permission denied (pu ...

  8. Linux自动挂载失败,linux – 在启动期间自动挂载单独分区时的systemd / udev依赖性失败...

    我在这里使用systemd-208与内核3.13.1和3.14.4在Exherbo(类似于Gentoo)下有类似的问题:我的单独分区(/ var,/ home,/ boot和even / swap)安 ...

  9. linux 下缓存失败,Linux下搭建网站提示缓存文件写入失败怎么办?

    Linux下搭建网站提示缓存文件写入失败时该怎么处理?基于ThinkPHP框架及Linux环境搭建的网站,经常会遭遇缓存文件写入失败的错误提示,即便是现在流行的P2P网站程序便是如此,具体解决方法请看 ...

最新文章

  1. python def函数报错详解_【python】详解python函数定义 def()与参数args、可变参数*args、关键参数**args使用实例...
  2. rust比java慢,rust为什么跑得比js慢
  3. 将PDF和Gutenberg文档格式转换为文本:生产中的自然语言处理
  4. 「作文素材详解」写作必知篇:语言优美不是作文第一要求
  5. CentOS7上GitLab的使用
  6. matlab在图像处理中的应用论文,MATLAB在数字图像处理中的应用
  7. 为opencv添加contrib库
  8. 【数据结构amp;amp;等差数列】KMP简介和算法的实现(c++ amp;amp; java)
  9. 问题六十八:光照模型(Light model)——关于“环境光”模型的补充
  10. (宏)Word 仅修改选中图片的尺寸
  11. Mail: JMail, System.Net.Mail, System.Web.Mail
  12. 二、Linux常用命令——文件处理命令
  13. Sharepoint SSL(Https)
  14. 离线网页地图开发-详细开发过程
  15. CH579 以太网转串口 串口服务器代码
  16. 小程序 — 关于图片Base64转换及空间大小问题
  17. “造路者”14载终圆梦:铺就浙江沿海新未来
  18. 【立创EDA开源推荐】10期基于PCB彩印教程(水转印)
  19. 以太坊MEV黑暗森林发展史:从Gas战争到PBS
  20. 心路历程 致正在为梦想奋斗的自己

热门文章

  1. 特征选择、特征选择方法
  2. trimmomatic对fastq质控
  3. php 顶踩,php和jQuery实现文章页【顶】和【踩】的功能
  4. java restfulapi 返回文件base64_Java反序列化:一次构造后Ysoserial Payload
  5. Windows下在Django中创建项目时ImportError: No module named django.core解决方法
  6. 通讯接口:I2C和USART,SPI,CAN,USB2.0
  7. oc引导win方法_[OC更新]机械革命10代标压稳定版更新
  8. Failed to load module script: The server responded with a non-JavaScript MIME type of “text/plain“.
  9. C++: 不可拷贝(noncopyable)类
  10. GO语言教程4:defer(延迟语句)详解