zoukankan      html  css  js  c++  java
  • Unix守护进程

    问题描述:

            Unix守护进程

    问题解决:

        Unix守护进程没有控制终端,终端名设置为问号(?),终端前台进程组ID设置(TPGID)为-1

    守护进程编写规则:

         (1)调用umask将文件模式创建屏蔽字设置为0,由继承得来的文件模式创建出屏蔽字可能会拒绝设置某些权限

         (2)调用fork,然后使父进程退出。这样做实现了一下几点:第一,如果该守护进程是作为一条简单的shell命令启动的,那么父进程终止使得shell认为这条命令已经执行完毕。子进程继承了父进程的进程组ID,但是具有一个新的进程ID,这样就保证了子进程不是一个进程组的组长进程。

         (3)调用setsid创建一个新会话,使调用进程:(a)成为新会话的首进程,(b)成为一个新进程组的组长进程,(c)没有控制终端

         (4)将当前工作目录更改为根目录(chdir),从父进程处继承的当前工作目录可能在一个装配文件系统中,因为守护进程通常在系统引导之前是一直存在的,所以如果守护进程的当前工作目录在一个装配文件系统中,那么该文件系统就不能被拆卸。

        (5)关闭不再需要的文件描述符(getrlimit)判断最高文件描述符值,并关闭直到该值的所有描述符

        (6)某些守护进程会打开/dev/null使其具有文件描述符0/1/2,但是这样做不会产生任何效果,因为守护进程并不与终端设备相关联,所以不能在终端设备上显示输出,也无处从交互式用户那里接受输入。

    守护进程实现:

    da1

    da2

    da3

    da4

    源程序文件:

    daemonize.c

  • 相关阅读:
    SSM——事务配置
    SSM——Spring+Mybtis整合(代理【mapper】开发模式)
    objective-c(五)关于代码块的使用
    objective-c(四)内存管理
    objective-c(三)类与对象的方法调用
    objective-c(二)基本数据类型介绍
    objective-c(一)关于基本数据类型打印输出方式
    Eclipse启动发生的错误:An internal error occurred during: "Initializing Java Tooling".
    单例模式
    Java 代理模式
  • 原文地址:https://www.cnblogs.com/luosongchao/p/3381554.html
Copyright © 2011-2022 走看看