精华内容
下载资源
问答
  • Linux守护进程守护进程的创建

    千次阅读 2016-08-03 12:26:40
    守护进程 守护进程是生存期长的一种进程。它们常常在系统引导装入时启动,仅在系统关闭时才终止。  守护进程没有控制终端。因此,说他们是在后台运行的。UNIX系统有很多守护进程,他们执行日常事务活动。  下面...

    守护进程

           守护进程是生存期长的一种进程。它们常常在系统引导装入时启动,仅在系统关闭时才终止。
           守护进程没有控制终端。因此,说他们是在后台运行的。UNIX系统有很多守护进程,他们执行日常事务活动。
           下面我从守护进程结构,以及如何编写守护进程程序两个方面分析守护进程。

    守护进程的特征

           我们使用ps -axj命令查看一些常用的系统守护进程。
    这里写图片描述
           系统进程依赖于操作系统实现。

    内核进程

           PPID = 0的各进程通常是内核进程,他们作为系统引导装入过程的一部分而启动。
           内核进程是特殊的,通常存在于系统的整个生命周期中,他们以超级用户特权运行,无控制终端,无命令行。

           在上面的ps输出结果中,内核守护进程的名字出现在方括号中。

    kthreadd是一个特殊的内核进程,他用来创建其他内核进程,所以kthreadd表现为其他内核进程的父进程。

    init

           init是个例外,它是一个内核在引导装入时启动的用户层次的命令。
           init是一个系统守护进程,除了其他的工作,主要负责启动个运行层次特定的系统服务。
           大多数守护进程都以超级用户(root)特权运行。所有的守护进程都没有控制终端,其终端名设置为文豪。内核守护进程以无控制终端方式启动。用户层守护进程缺少控制终端可能时守护进程调用了setsid函数的结果。
           大多数用户层守护进程都是进程组的组长进程以及会话的首进程,而且时这些进程组和会话中的唯一进程。
    用户层守护进程的父进程是init。

    编程规则

    • 首先要调用umask将文件模式创建屏蔽字设置为一个已知值(通常是0),有继承得来的文件模式创建屏蔽字可能会被设置为拒绝某些权限。如果守护进程要创建文件,那么他可能要设置特定的权限。
    • 调用fork,然后使父进程exit。这样做实现了
    • 1.如果守护进程是作为一条简单的shell命令启动的,那么父进程终止会让shell认为这条命令已经执行完毕。
    • 2.虽然子进程继承了父进程的进程组ID,但获得了一个新的进程ID,那么就保证了子进程不是一个进程组的组长进程。、
    • 3.调用setsid创建一个新回话。我们知道如果调用setsid函数的进程不是一个进程组的组长,则此函数创建一个新回话。并且:

      1)该进程变成新会话的会话首进程,此时,该进程是新会话中的唯一进程
      2)该进程成为一个新进程组的组长进程。新进程组ID是该调用进程的进程ID
      3)该进程没有控制终端,即使调用函数之前该进程有一个控制终端,现在这种关系也被切断。

            PS:在基于System V的系统中,可以调用两次fork函数达到以上目的,终止父进程,继续使用子进程中的守护进程,这就保证了该守护进程不是会话手进程,于是按照System V的规则,同样可以防止取得控制终端。

    • 4.将当前工作目录改为根目录。
    • 5.关闭不再需要的文件描述符。这是守护进程不再持有从其父进程继承来的任何文件描述符。

    守护进程的创建

            下面我们来创建守护进程:
    首先代码为:
    这里写图片描述
    接着我们进行代码的编译,执行。
    然后再执行ps -axj | grep create命令找出create_daemon进程
    得到:
    这里写图片描述
    可以看到,该进程的TTY为?,即守护进程已经被正确的创建了。

    展开全文
  • Linux守护进程

    2017-06-21 17:02:25
    守护进程

                                 守护进程




    守护进程的概述:

    Linux或者unix操作系统中在系统的引导的时候会开启很多服务,这些服务就叫做守护进程。为了增加灵活性,root可以选择系统开启的模式,这些模式叫做运行级别,每一种运行级别以一定的方式配置系统。 守护进程是脱离于终端并且在后台运行的进程。守护进程脱离于终端是为了避免进程在执行过程中的信息在任何终端上显示并且进程也不会被任何终端所产生的终端信息所打断。


    守护进程的简述:


    守护进程,也就是通常说的Daemon进程,是linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程常常在系统引导装入时启动,在系统关闭时终止。Linux系统有很多守护进程,大多数服务都是通过守护进程实现的,同时,守护进程还能完成许多系统任务,例如,作业规划进程crond、打印进程lqd等(这里的结尾字母d就是Daemon的意思)。

    由于在Linux中,每一个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端就称为这些进程的控制终端,当控制终端被关闭时,相应的进程都会自动关闭。但是守护进程却能够突破这种限制,它从被执行开始运转,直到整个系统关闭时才退出。如果想让某个进程不因为用户或终端或其他地变化而受到影响,那么就必须把这个进程变成一个守护进程。



    展开全文
  • linux创建守护进程

    千次阅读 2014-10-12 12:27:40
     linux开启进程都是与终端绑定的,终端一关,进程也关,如果想独立不受干扰,必须将此进程变为守护进程(在后台运行,不以终端方式与用户交互)。 守护进程能够突破这种限制,它从被执行开始运转,直到整个系统...

    一、概述

            linux开启进程都是与终端绑定的,终端一关,进程也关,如果想独立不受干扰,必须将此进程变为守护进程(在后台运行,不以终端方式与用户交互)。

            守护进程能够突破这种限制,它从被执行开始运转,直到整个系统关闭时才退出。如果想让某个进程不因为用户或终端或其他地变化而受到影响,那么就必须把这个进程变成一个守护进程。

     

    二、守护进程特性

            守护进程最重要的特性是后台运行。在这一点上DOS下的常驻内存程序TSR与之相似。其次,守护进程必须与其运行前的环境隔离开来:这些环境包括未关闭的文件描述符控制终端会话和进程组工作目录以及文件创建掩模等。这些环境通常是守护进程从执行它的父进程(特别是shell)中继承下来的。最后,守护进程的启动方式有其特殊之处。它可以在Linux系统启动时从启动脚本/etc/rc.d中启动,可以由作业规划进程crond启动,还可以由用户终端(通常是shell)执行。

            总之,除开这些特殊性以外,守护进程与普通进程基本上没有什么区别。因此,编写守护进程实际上是把一个普通进程按照上述的守护进程的特性改造成为守护进程。

     

    三、创建守护进程步骤

    创建一个简单的守护进程:

    step1:创建子进程,父进程退出: (假象--父进程已完成,可退出终端)

    step2: 在子进程中创建新会话:使用系统函数setid()--进程组、会话期

    step3: 改变当前目录为根目录,用fork创建的子进程继承了父进程的当前工作目录

    step4: 重设文件权限掩码: umask(0)

    step5: 关闭文件描述符

     

      1、创建子进程,父进程退出: (假象--父进程已完成,可退出终端)

      这是编写守护进程的第一步。由于守护进程是脱离控制终端的,因此,完成第一步后就会在Shell终端里造成一程序已经运行完毕的假象。之后的所有工作都在子进程中完成,而用户在Shell终端里则可以执行其他命令,从而在形式上做到了与控制终端的脱离。

      在Linux中父进程先于子进程退出会造成子进程成为孤儿进程,而每当系统发现一个孤儿进程是,就会自动由1号进程(init)收养它,这样,原先的子进程就会变成init进程的子进程。

      2、在子进程中创建新会话: 使用系统函数setid()--进程组、会话期

      这个步骤是创建守护进程中最重要的一步,虽然它的实现非常简单,但它的意义却非常重大。在这里使用的是系统函数setsid,在具体介绍setsid之前,首先要了解两个概念:进程组和会话期

      进程组:是一个或多个进程的集合。进程组有进程组ID来唯一标识。除了进程号(PID)之外,进程组ID也是一个进程的必备属性。每个进程组都有一个组长进程,其组长进程的进程号等于进程组ID。且该进程组ID不会因组长进程的退出而受到影响。

      会话周期:会话期是一个或多个进程组的集合。通常,一个会话开始与用户登录,终止于用户退出,在此期间该用户运行的所有进程都属于这个会话期。

      接下来就可以具体介绍setsid的相关内容:

      (1)setsid函数作用:

      setsid函数用于创建一个新的会话,并担任该会话组的组长。调用setsid有下面的3个作用:

      让进程摆脱原会话的控制

      让进程摆脱原进程组的控制

      让进程摆脱原控制终端的控制

      那么,在创建守护进程时为什么要调用setsid函数呢?由于创建守护进程的第一步调用了fork函数来创建子进程,再将父进程退出。由于在调用了fork函数时,子进程全盘拷贝了父进程的会话期、进程组、控制终端等,虽然父进程退出了,但会话期、进程组、控制终端等并没有改变,因此,还还不是真正意义上的独立开来,而setsid函数能够使进程完全独立出来,从而摆脱其他进程的控制。

      3、改变当前目录为根目录

      这一步也是必要的步骤。使用fork创建的子进程继承了父进程的当前工作目录。由于在进程运行中,当前目录所在的文件系统(如“/mnt/usb”)是不能卸载的,这对以后的使用会造成诸多的麻烦(比如系统由于某种原因要进入但用户模式)。因此,通常的做法是让"/"作为守护进程的当前工作目录,这样就可以避免上述的问题,当然,如有特殊需要,也可以把当前工作目录换成其他的路径,如/tmp。改变工作目录的常见函数式chdir。

      4、重设文件权限掩码: umask(0)

      文件权限掩码是指屏蔽掉文件权限中的对应位。比如,有个文件权限掩码是050,它就屏蔽了文件组拥有者的可读与可执行权限。由于使用fork函数新建的子进程继承了父进程的文件权限掩码,这就给该子进程使用文件带来了诸多的麻烦。因此,把文件权限掩码设置为0,可以大大增强该守护进程的灵活性。设置文件权限掩码的函数是umask。在这里,通常的使用方法为umask(0)。

      5、关闭文件描述符

      同文件权限码一样,用fork函数新建的子进程会从父进程那里继承一些已经打开了的文件。这些被打开的文件可能永远不会被守护进程读写,但它们一样消耗系统资源,而且可能导致所在的文件系统无法卸下。

            在上面的第二步之后,守护进程已经与所属的控制终端失去了联系。因此从终端输入的字符不可能达到守护进程,守护进程中用常规方法(如printf)输出的字符也不可能在终端上显示出来。所以,文件描述符为0、1和2 的3个文件(常说的输入、输出和报错)已经失去了存在的价值,也应被关闭。通常按如下方式关闭文件描述符:

    for(i=0;i<MAXFILE;i++)  
        close(i);

    这样,一个简单的守护进程就建立起来了。

    实现守护进程的完整实例(每隔10s在/tmp/dameon.log中写入一句话):

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<fcntl.h>
    #include<sys/types.h>
    #include<unistd.h>
    #include<sys/wait.h>
    #define MAXFILE 65535
    int main()
    {
        pid_t pc;
        int i, fd, len;
        char *buf="this is a Dameon\n";
        len = strlen(buf);
        pc = fork(); //第一步
        if(pc<0){
            printf("error fork\n");
            exit(1);
        }
        else if(PC>0)
            exit(0);
            setsid(); //第二步
            chdir("/"); //第三步
          umask(0); //第四步
          for(i=0;i<MAXFILE;i++) //第五步
              close(i);
              if((fd=open("/tmp/dameon.log",O_CREAT|O_WRONLY|O_APPEND,0600))<0){
                  perror("open");
                  exit(1);
          }   
          while(1){
             write(fd,buf,len+1);
              sleep(10);
          }
    }
    

    四、守护进程编程要点

            不同Unix环境下守护进程的编程规则并不一致。所幸的是守护进程的编程原则其实都一样,区别在于具体的实现细节不同。这个原则就是要满足守护进程的特性。同时,Linux是基于Syetem V的SVR4并遵循Posix标准,实现起来与BSD4相比更方便。

    1. 在后台运行。

            为避免挂起控制终端将Daemon放入后台执行。方法是在进程中调用fork使父进程终止,让Daemon在子进程中后台执行。

    if(pid=fork())

    exit(0);//是父进程,结束父进程,子进程继续

    2. 脱离控制终端,登录会话和进程组

            有必要先介绍一下Linux中的进程与控制终端,登录会话和进程组之间的关系:进程属于一个进程组,进程组号(GID)就是进程组长的进程号(PID)。登录会话可以包含多个进程组。这些进程组共享一个控制终端。这个控制终端通常是创建进程的登录终端。

            控制终端,登录会话和进程组通常是从父进程继承下来的。我们的目的就是要摆脱它们,使之不受它们的影响。方法是在第1点的基础上,调用setsid()使进程成为会话组长:setsid();

            说明:当进程是会话组长时setsid()调用失败。但第一点已经保证进程不是会话组长。setsid()调用成功后,进程成为新的会话组长和新的进程组长,并与原来的登录会话和进程组脱离。由于会话过程对控制终端的独占性,进程同时与控制终端脱离。

    3. 禁止进程重新打开控制终端

            现在,进程已经成为无终端的会话组长。但它可以重新申请打开一个控制终端。可以通过使进程不再成为会话组长来禁止进程重新打开控制终端:

    if(pid=fork())

    exit(0);//结束第一子进程,第二子进程继续(第二子进程不再是会话组长)

    4. 关闭打开的文件描述符

            进程从创建它的父进程那里继承了打开的文件描述符。如不关闭,将会浪费系统资源,造成进程所在的文件系统无法卸下以及引起无法预料的错误。按如下方法关闭它们:

    for(i=0;i 关闭打开的文件描述符close(i);>

    5. 改变当前工作目录

            进程活动时,其工作目录所在的文件系统不能卸下。一般需要将工作目录改变到根目录。对于需要转储核心,写运行日志的进程将工作目录改变到特定目录如/tmpchdir("/")

    6. 重设文件创建掩模

            进程从创建它的父进程那里继承了文件创建掩模。它可能修改守护进程所创建的文件的存取位。为防止这一点,将文件创建掩模清除:umask(0);

    7. 处理SIGCHLD信号

            处理SIGCHLD信号并不是必须的。但对于某些进程,特别是服务器进程往往在请求到来时生成子进程处理请求。如果父进程不等待子进程结束,子进程将成为僵尸进程(zombie)从而占用系统资源。如果父进程等待子进程结束,将增加父进程的负担,影响服务器进程的并发性能。在Linux下可以简单地将SIGCHLD信号的操作设为SIG_IGN。

    signal(SIGCHLD,SIG_IGN);

            这样,内核在子进程结束时不会产生僵尸进程。这一点与BSD4不同,BSD4下必须显式等待子进程结束才能释放僵尸进程。

    -------------------------------------------------------------------------------------------------------------------

    守护进程顾名思义就是默默运行在后台的进程。它具有以下特征:

    1. 父进程是init
    2. 没有和任何控制终端关联,所以也不会收到诸如SIGINT、SIGTSTP等信号
    创建守护进程步骤
    1. fork()创建子进程,父进程退出这样做的2个目的:

    • 使调用程序的控制台结束挂起,可以继续执行
    • 使得新创建的进程不会成为进程组的leader,保证了接下来的setsid()顺利执行

    1. 调用setsid(),创建新的session,使得调用者进程失去和控制终端的关联
    2. 避免进程后续打开终端设备不会成为控制终端,有2种办法:

    •  每次open()的时候指定参数O_NOTTY
    •  再执行一次fork()并且让主进程退出,使得进程的子进程不会成为会话的leader

    1. 清除从祖先继承下来umask值,以便后续的创建的文件文件夹能有指定的权限
    2. 改变工作目录(可选)

    •  一般是换到/目录下。如果不这样做,有可能导致占用文件系统,使之无法卸载。

    1. 关闭从父进程继承的文件描述符(可选)

    • 既然已经失去了控制终端,还保留0 1 2文件描述符就显得多余。
    • 当还有文件描述符在某个磁盘上时,会妨碍文件系统的卸载。

    1. 重定向描述符(可选)

    • 将0 1 2指向/dev/null
    • 避免后续向这3个描述符的io操作不会发生异常

    另外一个例子:
    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    
    int daemonize() {
    
        // 1. 第一次fork()
        switch (fork()) {
        case -1: exit(-1); // fork错误
        case 0: break;     // 子进程继续
        default: exit(0);  // 父进程退出
        }
    
        // 2. 创建新的session
        setsid();
    
        // 3. 第二次fork()
        switch (fork()) {
        case -1: exit(-1); // fork错误
        case 0: break;     // 子进程继续
        default: exit(0);  // 父进程退出
        }
    
        // 4. 清空umask值
        umask(0);
    
        // 5. 改变工作目录(可选)
        chdir("/");
    
        // 6. 关闭从父进程继承来的文件描述符
        int maxfd = sysconf(_SC_OPEN_MAX); // 获取系统的最大打开文件数
        if (-1 == maxfd) {
            maxfd = 8192; // 获取失败,使用猜测的最大数
        }
        // 关闭所有文件描述符
        for (int fd = 0; fd < maxfd; fd++) {
            close(fd);
        }
    
        // 7. 重定向0 1 2
        close(STDIN_FILENO);
        int fd = open("/dev/null", O_RDWR);
        if (fd != STDIN_FILENO) {
            return -1;
        }
        if (dup2(STDIN_FILENO, STDOUT_FILENO) != STDOUT_FILENO) {
            return -1;
        }
        if (dup2(STDIN_FILENO, STDERR_FILENO) != STDERR_FILENO) {
            return -1;
        }
    
        return 0;
    }
    
    int main(int argc, char *argv[]) {
        daemonize();
        sleep(100);
        return 0;
    }
    

    注意:

            1.进程组的id需要和leader进程的id保持一致。由于组id是父进程的id,故子进程id必然不会和组的id一致。

            2.进程组leader调用setsid(),会发生EPERM错误。进程调用setsid()时,会同时创建新的进程组,并使用调用进程的id作为新进程组的组id。又因为进程组的组id总是组leader进程的id,若leader进程使用setsid()创建了新的session,一并创建的新的进程组id就会和原进程组id冲突。

            3.会话的id是setsid()的调用者的进程id。这里再fork()一次,会话的id就是父进程的id。则子进程的id必然不会是会话的id,进而失去了获得控制终端的能力。


    展开全文
  • Linux守护进程/精灵进程的创建

    千次阅读 多人点赞 2021-04-12 21:18:08
    守护进程周期性的执行某些任务或者等待处理某些事件,Linux上的大多数服务器都是用守护进程实现的。 在系统启动中默认的守护进程的父进程ID全都是init,守护进程特征就是在程序运行名后加了一个d,但不是所有的尾...

    守护进程也称精灵进程(Daemon),是运行在后台的一种特殊进程。守护进程独立于控制终端,它们常常跟随系统启动时启动,在系统关闭时才结束。守护进程周期性的执行某些任务或者等待处理某些事件,Linux上的大多数服务器都是用守护进程实现的。
    在系统启动中默认的守护进程的父进程ID全都是init,守护进程特征就是在程序运行名后加了一个d,但不是所有的尾字母是d的进程都是守护进程。
    要创建一个守护进程,我们需要:

    1.调用umask()函数,将文件模式创建屏蔽字设置为0

     umask(0);      //用umask将文件模式创建屏蔽字设置为0
    

    2.调用fork函数,退出父进程。(用来保证守护进程不是进程组长)

    if(fork() == 0)    //fork子进程,关闭父进程
        {}
        else
        {
            exit(0);
        }
    

    3.调用setsid创建一个会话(setsid的作用:调用进程成为新会话的首进程、调用进程成为一个新进程组的组长进程、调用进程没有控制终端)

    setsid();   //让子进程成为一个守护进程
    

    4.将当前工作目录更改为根目录(系统中除了根目录都可以被删除,要避免守护进程被删除)

    chdir("/");  //更改当前目录为根目录
    

    5.关闭不需要的文件描述符

    close(0);   //关闭默认的文件描述符表
    close(1);
    close(2);
    

    6.忽略SIGCHLD信号;

    signal(SIGCHLD, SIG_DFL);   //忽略SIGCHLD信号
    

    自己创建一个守护进程的完整代码如下:

    #include<stdio.h>
    #include<sys/types.h>
    #include<sys/stat.h>
    #include<signal.h>
    #include<unistd.h>
    #include<stdlib.h>
    void mydaemon()   
    {
        umask(0); 
        if(fork() == 0)  
        {}
        else{
            exit(0);
        }
        setsid(); 
        chdir("/");    
        close(0);   
        close(1);
        close(2);
        signal(SIGCHLD, SIG_DFL);  
    }
    int main()
    {
        mydaemon();
        while(1)
        {}
        return 0;
    }
    
    展开全文
  • 1、什么是守护进程守护进程也称为精灵进程,是运行在后台进程的一种特殊...Linux大多数服务器就是用守护进程实现的,例如:Internet服务器inetd,Web服务器httpd查看系统中的守护进程:使用命令 ps axj 凡是TPGID一
  • 1.守护进程的概念,特点,以及创建守护进程的代码实现。 2.两次fork的原因。 3.利用cron进程实现定时向终端打印数据的任务。守护进程的定义:守护进程是一种生存期长的进程。通常在系统引导装入时启动,仅仅在系统...
  • linux守护进程

    千次阅读 2018-03-08 21:05:10
    1.守护进程最重要的特性是后台运行。 2.守护进程必须与其运行前的环境隔离开来。这些环境包括未关闭的文件描述符,控制终端,会话和进程组,工作目录以及文件创建掩模等。这些环境通常是守护进程从执行它的父进程...
  • Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任   务。比如,作业规划进程crond等。Linux系统启动时会启动很多系统
  • linux python守护进程编写

    千次阅读 2017-03-30 15:39:41
    转自:守护进程 守护进程是生存期长的一种进程。它们独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。他们常常在系统引导装入时启动,在系统关闭时终止。unix系统有很多守护进程,大多数服务器...
  • Linux守护进程

    2017-02-26 17:00:16
    我们在图中看到,图中所列举的这些都是与控制终端无关的进程,在Linux中我们称这些进程为守护进程,也叫做精灵进程,今天我们就来谈一谈Linux下面的守护进程把。什么是守护进程守护进程也被称为精灵进
  • 何为守护进程 、进程组 / 组长进程 / 会话 / 会话首进程 、守护进程的创建步骤 、创建守护进程程序示例
  • Linux守护进程

    千次阅读 2015-07-02 15:08:42
    守护进程daemon,是生存期较长的一种进程。它们常常在系统自举时启动,仅在系统关闭时才终止。因为它们没有控制终端,所以说它们是在后台运行的。UNIX系统有很多守护进程,它们执行日常事务活动。1、系统自举自举...
  • Linux编写守护进程获取进程信息

    千次阅读 2019-04-07 15:46:14
    记录系统运行期间所有运行的进程,记录信息包括:进程PID,可执行程序名称,用户名,创建时间,撤销时间,开机能自启动
  • linux守护进程

    2011-09-04 21:29:28
    守护进程简介:  守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程。它是一个生存期较长的进程,通常独立...守护进程常常在系统引导装入时启动,在系统关闭时终止。Linux系统有很多守护进程,大多数服务
  • Linux创建守护进程

    2013-08-07 22:52:37
    创建守护进程 创建子进程,父进程退出  这是编写守护进程的第一步。由于守护进程是脱离控制终端的,因此,完成第一步后就会在Shell终端里造成一程序已经运行完毕的假象。之后的所有工作都在子进程中完成,而用户...
  • 在讲解xinetd之前,我们先要了解什么是守护...守护进程常常在系统引导装入时启动,在系统关闭时终止。Linux系统有很多守护进程,大多数服务都是通过守护进程实现的,同时,守护进程还能完成许多系统任务,例如,作业
  • Linux守护进程

    2012-05-16 16:49:19
    Linux服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户。提供这些服务的程序是由运行在...linux系统有很多守护进程,大多数服务器都是用守护进程实现的
  • linux 设置守护进程

    2018-10-18 10:44:14
    1.在linux下面如果不是程序主动提供的守护进程的功能或参数的情况下,是要自行将程序设为守护进程运行的,这里以centos上运行hudson为例; 通常情况下,只要在运行时在程序末尾加&amp;即可,注意:&amp;...
  • 系统守护进程 /etc/inetd.conf 或/etc/xinetd.conf 适合访问量小 独立守护进程 standalone 适合访问量大 standalone一次性启动,运行期间一直驻留在内存中,优点是对接入信号反应快,缺点是损耗了一定的系统资源...
  • 六.linux进程之守护进程

    千次阅读 2019-04-27 16:41:04
    1.Linux系统守护进程的创建流程: 1、后台运行 2、脱离控制终端、登录会话和进程组 3、改变当前工作目录 4、umask设置为0以取消任何文件权限屏蔽 5、关闭所有文件描述符 6、将0、1、2定位到/dev/null 2、守护...
  • Linux守护进程编写

    2019-04-12 00:09:38
    Linux守护进程编写 环境:VMware 15 + ubuntu 16 护进程的特点 后台服务程序,随系统启动而启动。 很多系统服务通过守护进程完成。 守护进程的名字往往以字母‘d’结尾 生存周期长。系统装入时...
  • 守护进程常常在系统引导装入时启动,在系统关闭时终止。Linux系统有很多守护进程,大多数服务都是通过守护进程实现的,同时,守护进程还能完成许多系统任务,例如,作业规划进程crond、打印进程lqd等(这里的结尾...
  • Linux守护进程的概念

    千次阅读 2018-07-09 10:43:07
    转:http://blog.51cto.com/linuxzoe/572965在讲解xinetd之前,我们先要了解什么是守护进程。...守护进程常常在系统引导装入时启动,在系统关闭时终止。Linux系统有很多守护进程,大多数服务都是...
  • linux nohup守护进程

    2018-07-27 17:26:02
    后台守护进行 ...gt;/dev/null 2&gt;&amp;1 &... 查看进程 ...杀死进程 ...通过前面的步骤,我们知道如何开启和关闭一个php进程,但是,在实际的应用中,我们不可能每次都是手动开启,这样我...
  • 守护进程
  • linux C守护进程编写

    2014-02-11 21:09:11
    linux编程-守护进程编写 守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待 处理某些发生的事件。守护进程是一种很有用的进程。 Linux的大多数服务器就是用守护...
  • linux 守护进程

    2013-05-03 16:02:59
    linux编程-守护进程编写 守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待 处理某些发生的事件。守护进程是一种很有用的进程。 Linux的大多数服务器就是用守护...
  • Linux 守护进程

    千次阅读 2018-08-26 11:06:13
    1. 守护进程概述 ... 守护进程常常在系统引导载入时启动, 在系统关闭时终止。 Linux 有很多系统服务, 大多数服务都是通过守护进程实现的。 同时, 守护进程还能完成许多系统任务, 例如, 作业规...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 56,027
精华内容 22,410
关键字:

linux关闭守护进程

linux 订阅