zoukankan      html  css  js  c++  java
  • linux下的守护进程及会话、进程组

      守护进程、会话、进程组网上有许多不错的资料。我也是网上搜罗了一堆,加上自己的理解。不敢说原创,只是写在这怕自己忘记罢了。才疏学浅,难免有错误,欢迎大家指正。下面这篇写很不错,大家可以去看看:http://www.cnblogs.com/forstudy/archive/2012/04/03/2427683.html。下面的部分内容引用了他的描述。

      进程组:进程组就是把一个或多个进程划为一组,给这个组分配一个组id(pgid),这个id通常是进程组组长(该组的第一个进程)的pid。如果进程组组长退出,其组的pgid不变。在这个组解散之前,系统也不会分配与此pgid相同值的pid给其他程序。进程组的设计方便对一组进程进行管理,如同时终止一组进程。还有一些系统底层上的设计,如管道。在应用上,通常用于多进程程序判断其他进程的状态。

      会话:多个进程组构成一个会话。通常我们登录用户时会产生一个会话,退出时该会话结束。属于该会话的进程(比如我们开的浏览器、音乐播放)在该会话结束时都会被终止。

      终端shell:在以前,计算机没有界面,所有的操作都是命令行。因此,当时的程序往往与shell相关,它需要shell来显示及输入信息。比如top程序,如果你直接退出shell,则也将终止它。但是现在界面多了,很多不依赖shell。但很多服务器程序还是在终端上运行,如果想成为守护进程,则需要脱离终端。

      很多操作系统是多用户的。我们开机后,登录用户,然后开启程序,开始作业(上网,看视频等)。但是,很多程序并不是在用户登录后才开始作业,这些一般都是守护进程,如网络服务。守护进程是不依赖用户的。如果一个服务器上的程序,在用户登录后开启,用户退出后终止,这怎么可能。所以一个守护进程的特点:

    守护进程编程步骤
      1. 创建子进程,父进程退出
        •所有工作在子进程中进行
        •形式上脱离了控制终端(不能在shell通过ctrl+c来终止)
      2. 在子进程中创建新会话
        •setsid()函数
        •使子进程完全独立出来,脱离控制(用户退出终止会话时不停止服务)
      3. 改变当前目录为根目录
        •chdir()函数
        •防止占用可卸载的文件系统
        •也可以换成其它路径
      4. 重设文件权限掩码
        •umask()函数
        •防止继承的文件创建屏蔽字拒绝某些权限
        •增加守护进程灵活性
      5. 关闭文件描述符
        •继承的打开文件不会用到,浪费系统资源,无法卸载
        •getdtablesize()
        •返回所在进程的文件描述符表的项数,即该进程打开的文件数目

      其中,第一点第二点是必要的,其他的可以根据自己的程序来决定是否处理。

  • 相关阅读:
    Asp.net 动态添加Meta标签
    【转】在SharePoint Server 2010中更改“我的网站”
    SPQuery DateTime 类型查询
    Asp.net Web Application 打开 SharePoint 2010 Site 错误 The Web application at could not be found
    How To Create SharePoint 2010 Site Collection In Its Own DB
    C# 文件打印
    面试题 java集合
    《深入理解Java虚拟机》(六)堆内存使用分析,垃圾收集器 GC 日志解读
    《深入理解Java虚拟机》(五)JVM调优
    《深入理解Java虚拟机》(四)虚拟机性能监控与故障处理工具
  • 原文地址:https://www.cnblogs.com/coding-my-life/p/4069633.html
Copyright © 2011-2022 走看看