zoukankan      html  css  js  c++  java
  • daemon Thread

    1.概念

    守护进程(daemon)是指在UNIX或其他多任务操作系统中在后台执行的电脑程序,并不会接受电脑用户的直接操控。此类程序会被以进程的形式初始化。守护进程程序的名称通常以字母“d”结尾:例如,syslogd就是指管理系统日志的守护进程。

    通常,守护进程没有任何存在的父进程(即PPID=1),且在UNIX系统进程层级中直接位于init之下。守护进程程序通常通过如下方法使自己成为守护进程:对一个子进程调用fork,然后使其父进程立即终止,使得这个子进程能在init下运行。这种方法通常被称为“脱壳”。

    系统通常在启动时一同启动守护进程。守护进程为对网络请求,硬件活动等进行响应,或其他通过某些任务对其他应用程序的请求进行回应提供支持。守护进程也能够对硬件进行配置(如在某些Linux系统上的devfsd),运行计划任务(例如cron),以及运行其他任务。

    在DOS环境中,此类应用程序被称为驻留程序(TSR)。在Windows系统中,由称为Windows服务的应用程序来履行守护进程的职责。

    在原本的Mac OS系统中,此类应用程序被称为“extensions”。而作为Unix-like的 Mac OS X有守护进程。(在Mac OS X中也有“服务”,但他们与Windows中类似的程序在概念上完全不相同。)

    2.关键点理解

    1).所谓守护线程就是运行在程序后台的线程,程序的主线程Main(比方java程序一开始启动时创建的那个线程)不会是守护线程.


    2).Daemon thread在Java里面的定义是,如果虚拟机中只有Daemon thread 在运行,则虚拟机退出。 
      虚拟机中可能会同时有很多个线程在运行,只有当所有的非守护线程都结束的时候,虚拟机的进程才会结束,不管在运行的线程是不是main()线程。


    3).Main主线程结束了(Non-daemon thread),如果此时正在运行的其他threads是daemon threads,JVM会使得这个threads停止,JVM也停下.
      如果此时正在运行的其他threads有Non-daemon threads,那么必须等所有的Non daemon线程结束了,JVM才会停下来.


    4).总之,必须等所有的Non-daemon线程都运行结束了,只剩下daemon的时候,JVM才会停下来,注意Main主程序是Non-daemon线程.


    5).默认产生的线程全部是Non-daemon线程.

    3.example

    class   A   implements   Runnable{  
              public   void   run(){  
                      for(;;){  
                              System.out.println("Thread   A   run");  
                      }  
              }  
       
              public   static   void   main(String[]   args){  
                      System.out.println("Thread   main   started!");  
                      try{  
                              (new   Thread(new   A())).start();  
                      }   catch   (Exception   e){  
                      }  
                      System.out.println("Thread   main   ended!");  
              }  
      };  

    会一直跑下去,因为main进程结束了,但   A   进程还没有结束,虚拟机不能退出.

    class   A   implements   Runnable{  
              public   void   run(){  
                      for(;;){  
                              System.out.println("Thread   A   run");  
                      }  
              }  
       
              public   static   void   main(String[]   args){  
                      System.out.println("Thread   main   started!");  
                      try{  
                              Thread   a   =   new   Thread(new   A());  
                              a.setDaemon(true);  
                              a.start();  
                      }   catch(Exception   e){  
                      }  
                      System.out.println("Thread   main   ended!");  
              }  
      };  

     main线程一退出,虚拟机就退出了,因为剩下在跑的a线程是守护线程,虚拟机不管它的死活的,直接退出了。

    可能很难,但是相信,坚持总会看到奇迹。 在结果还没有的时候,我唯一可以选择的就是努力奋斗,静下心来。 结果会慢慢的浮出水面。
  • 相关阅读:
    小白日记33:kali渗透测试之Web渗透-扫描工具-Burpsuite(一)
    小白日记31:kali渗透测试之Web渗透-扫描工具-Arachni
    小白日记30:kali渗透测试之Web渗透-扫描工具-Skipfish
    小白日记29:kali渗透测试之Web渗透-扫描工具-Vega
    小白日记28:kali渗透测试之Web渗透-扫描工具-Nikto
    小白日记27:kali渗透测试之Web渗透-Http协议基础,WEB
    小白日记26:kali渗透测试之提权(六)--收集敏感信息,隐藏痕迹
    小白日记24:kali渗透测试之提权(四)--利用漏洞提权
    小白日记25:kali渗透测试之提权(五)--利用配置不当提权
    小白日记23:kali渗透测试之提权(三)--WCE、fgdump、mimikatz
  • 原文地址:https://www.cnblogs.com/jsStudyjj/p/4210860.html
Copyright © 2011-2022 走看看