如何让程序真正地在后台运行?

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

转载声明:转载请注明出处,本技术博客是本人原创文章

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 如何让程序真正地在后台运行?

如何让程序真正地在后台运行?

守护进程

如何实现

  • 调用umask设置文件模式,通常设置为0。为了便于后续创建文件,不使用继承而来的父进程的设置,需要设置新的权限掩码。
  • 调用fork,创建子进程,并且父进程退出
  • 调用setdid创建新的会话(一个或多个进程组的集合),由于当前进程不是一个进程组的组长,因此会创建一个新的会话,却成为组长进程,同时没有控制终端。
  • 将当前工作目录切换为根目录。同样的,其工作目录可能是从父进程继承而来的,可以自己另立山头。
  • 关闭不需要的文件描述符。同样的,可能从父进程继承了一些打开的文件描述符,而这些描述符可能再也不需要,因此可以关闭。
  • 重定向标准输出,标准输入和标准错误到/dev/null(相关阅读:)
  • 重新设置权限掩码,避免受父进程影响
  • 创建新的会话,脱离终端
  • 使用新的工作目录
  • 关闭不需要的文件描述符
  • 关闭标准输入,标准输出和标准错误
  • 具体实现

    实际实现

  • nochdir 为0时,表示修改其根目录为/,否则不变
  • noclose,为0时,表示将标准输入,标准输出,标准错误重定向到/dev/null。
  • 总结

  • 创建子进程,父进程退出
  • 创建新的会话,脱离终端
  • 相关精彩推荐

    原文始发于微信公众号(编程珠玑):

    本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

    转载声明:转载请注明出处,本技术博客是本人原创文章

    本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

    原文链接:blog.ouyangsihai.cn >> 如何让程序真正地在后台运行?


     上一篇
    到底什么情况下会合成默认构造函数? 到底什么情况下会合成默认构造函数?
    来源:https://www.cnblogs.com/QG-whz/p/4676481.html 作者:good luck 编辑:公众号【编程珠玑】 编辑注:没有构造函数的时候编译器一定会生成默认构造函数吗? 什么情况下,编译
    下一篇 
    那些奇奇怪怪的缓冲问题 那些奇奇怪怪的缓冲问题
    更改缓冲类型 指向终端设备的流是行缓冲的 标准错误是不带缓冲的 指向文件的流是全缓冲的 …… stream FILE *类型,文件指针 buf 缓冲区指针 mode 缓冲模式,包括_IOFBF(全缓冲),_IO