守护进程、会话、进程组网上有许多不错的资料。我也是网上搜罗了一堆,加上自己的理解。不敢说原创,只是写在这怕自己忘记罢了。才疏学浅,难免有错误,欢迎大家指正。下面这篇写很不错,大家可以去看看: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()
    •返回所在进程的文件描述符表的项数,即该进程打开的文件数目

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

linux下的守护进程及会话、进程组的更多相关文章

  1. linux下daemon守护进程的实现(以nginx代码为例)

    ngx_int_t ngx_daemon(ngx_log_t *log) { int fd; // 让init进程成为新产生进程的父进程: // 调用fork函数创建子进程后,使父进程立即退出.这样, ...

  2. linux 下通过fork实现后台运行进程

    1 # 通常建议使用双fork方法.在每个fork处,父级退出,子级继续 2 3 #!/usr/bin/env python 4 5 import time,platform 6 7 import o ...

  3. linux下的守护进程daemon

    什么是守护进程?其实感觉守护进程并没有什么明确的定义,只是守护进程有一些特征,这是它需要遵循的. 守护进程的第一个特征是长时间在后台运行的程序,并且主要是为了提供某种服务,而为了能够让服务尽可能随时都 ...

  4. linux下的守护进程

    关于守护进程,在此会介绍一下几种: 1.screen 2.supervisord(python) 一:Screen 开始使用Screen 简单来说,Screen是一个可以在多个进程之间多路复用一个物理 ...

  5. linux下svn使用及查看杀掉进程

    ps –aux ubuntu下安装subversion客户端: sudo apt-get install subversion svn正在checkout时候无法退出操作,shift+ctrl+t新建 ...

  6. 学习笔记:Linux下共享内存的方式实现进程间的相互通信

    一.常用函数 函数系列头文件 #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> ft ...

  7. Linux下启动停止查看杀死Tomcat进程

    文章来自:http://www.linuxidc.com/Linux/2011-06/37180.htm 启动 一般是执行tomcat/bin/startup.sh,sh tomcat/bin/sta ...

  8. Windows和Linux下如何查看端口被哪个进程占用

    Windows: C:/Users/ewanbao>netstat -aon|findstr "123"  TCP    127.0.0.1:55123        0.0 ...

  9. linux下多进程的文件拷贝与进程相关的一些基础知识

    之前实现了用文件IO的方式能够实现文件的拷贝,那么对于进程而言,我们是否也能够实现呢? 答案是肯定的. 进程资源: 首先我们先回想一下,进程的执行须要哪些资源呢?其资源包含CPU资源,内存资源,当然还 ...

随机推荐

  1. mybatis学习笔记第一讲

    第一步:先配置mybatis配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE confi ...

  2. Java中的XML操作

    1.DOM方式解析(读取)XML文件 待解析(读取)的XML文件,直接放在项目根目录下即可 <?xml version="1.0" encoding="UTF-8& ...

  3. css中的段落样式及背景

    一.段落样式 css中关于段落的样式主要有行高,缩进,段落对齐,文字间距,文字溢出,段落换行等.它们的具体语法如下: line-height : normal | length text-indent ...

  4. javascript:DOM自定义属性的妙用

    虽然HTML元素的属性已经十分丰富,但在某些场合下,元素固有的属性无法完成我们的需求: 这个时候,自定义属性就会让问题解决起来比较方便. 比如,下面的栗子: 多张图片点击变化事件:当背景图片为a.jp ...

  5. JSF标签大全详解

    1. JSF入门 藉由以下的几个主题,可以大致了解JSF的轮廓与特性,我们来看看网页设计人员与应用程序设计人员各负责什么. 1.1简介JSF Web应用程序的开发与传统的单机程序开发在本质上存在着太多 ...

  6. HDU 2074 叠筐

    叠筐 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission ...

  7. unbantu相关笔记

    很多项目使用的系统是centos或者redhat,最近有一个项目使用的系统竟然是阿里云unbantu,不知道他们负责人怎么想的,明明有centos,非要用unbantu.抱怨到此,unbantu的学习 ...

  8. c#基础: 线程的初级用法总结

    启动一个线程的两种方法:     a.使用无参的方法       Thread thread1 = new Thread(new ThreadStart("调用的方法名")):   ...

  9. 再入门JavaScript

    从去年毕业到现今,工作不到一年.接触了3个实际项目,一个实训项目.却反而只有实训项目做的比较像样子. 重新又回到写脚本的岗位上,第一次真正意义上接触脚本应该是在达内培训时候李大神所引进,大神各种技术, ...

  10. JedisPool操作

    Jedis 使用 commons-pool 完成池化实现. 先做个配置文件(properties文件): #最大分配的对象数 redis.pool.maxActive=1024 #最大能够保持idel ...