• vtun 守护进程详解


    声明:转载注明出处!

    image

    注:

    1、 PID文件

    the pid files contains the process id (a number) of a given program. For example, Apache HTTPD may write it's main process number to a pid file - which is a regular text file, nothing more than that -, and later use the information there contained to stop itself. You can also use that information (just do a cat filename.pid) to kill the process yourself, using kill <the number in the .pid file>

    vtun的pid文件不是必须的?

    2、 守护进程

    根据守护进程的启动和管理方式,可以分为独立启动守护进程和超级守护进程两类

    独立启动(stand_alone):该类进程启动后就常驻内存,所以会一直占用系统资源。其最大的优点就是它会一直启动,当外界有要求时相应速度较快,像httpd等进程;
    超级守护进程:系统启动时由一个统一的守护进程xinet来负责管理一些进程,当相应请求到来时需要通过xinet的转接才可以唤醒被xinet管理的进程。这种进程的优点时最初只有xinet这一守护进程占有系统资源,其他的内部服务并不一直占有系统资源,只有数据包到来时才会被xinet管理员来唤醒。并且我们还可以通过xinet来对它所管理的进程设置一些访问权限,相当于多了一层管理机制。

    如果用两个比喻来形容两类守护进程的话一般会用银行的业务处理窗口来类比:
    独立启动:银行里有一种单服务的窗口,像取钱,存钱等窗口,这些窗口边上始终会坐着一个人,如果有人来取钱或存钱,可以直接到相应的窗口去办理,这个处理单一服务的始终存在的人就是独立启动的守护进程;

    超级守护进程:银行里还有一种窗口,提供综合服务,像汇款,转账,提款等业务;这种窗口附近也始终坐着一个人(xinet),她可能不提供具体的服务,提供具体服务的人在里面闲着聊天啊,喝茶啊,但是当有人来汇款时他会大声喊一句,小王,有人汇款啦,然后里面管汇款的小王会立马跑过来帮忙办完汇款业务。其他的人继续聊天,喝茶。这些负责具体业务的人我们就称之为超级守护进程。当然可能汇款人会有一些规则,可能不能往北京汇款,他就会提早告诉xinet,所以如果有人来汇款想汇往北京的话,管理员就直接告诉他这个我们这里办不到的,于是就根本不会去喊汇款员了,相当于提供了一层管理机制。针对这种窗口还存在多线程和单线程的区别:多线程:将所有用户的要求都提上来,里面的人都别闲着了,都一起干活吧;单线程:大家都排好队了,一个一个来,里面的人同一时间只有一个人在工作。

    这里需要注意的是超级守护进程的管理员xinet也是一个守护进程,只不过它的任务就是传话,其实这也是一个很具体很艰巨的任务哦。

    当然每个守护进程都会监听一个端口(银行窗口),一些常用守护进程的监听端口是固定的,像httpd监听80端口, sshd监听22端口等;我们可以将其理解为责任制,时候等待,有求必应。具体的端口信息可以通过cat /etc/services来查看。

    clip_image002 clip_image004

    结合vtun,这里的独立启动守护进程和超级守护进程是针对server的,当是独立启动守护进程时,server端的套接字创建、监听、绑定、接受和读写等操作和平时编程一样。当server是超级守护进程时,由系统(相当于server端的父进程)进行监听,然后复制套接字描述符到0、1、2,server端对0 、1、2描述符的操作就是对该套接字的操作。

    Server端建议用独立启动守护进程或者干脆不建立守护进程。

    参考:http://www.cnblogs.com/itech/archive/2010/12/27/1914846.html

  • 相关阅读:
    在QT函数中返回一个数组/把一个数组传参给函数
    QT储存内容到指定的文件内
    QT对linux下/sys/class/gpio中的gpio的控制
    QT 线程的暂停和继续
    QT的close和系统的close冲突
    画动态曲线另一种方式方式
    QT关于iCCP警告去除
    ps两张图片合在一起
    ps 做动态图
    解决MFC中因控件类多次Attch造成的销毁窗口过程中CWnd* pWnd = CWnd::FromHandlePermanent(hWnd); ASSERT(pWnd != NULL); 断言失败的问题
  • 原文地址:https://www.cnblogs.com/helloweworld/p/2702989.html
Copyright © 2020-2023  润新知