zoukankan      html  css  js  c++  java
  • 2019-08-05

    一.linux中有三种基本类型的进程:交互式,批处理和守护进程

    1. 用户在命令行以交互方式运行交互式进程
    2. 批处理过程从进程队列提交,并且不与命令行关联

    当系统使用率较低的时候,交互式与批处理非常适合执行重复性任务

    守护进程被系统识别为父进程的PID为1的任何进程,它始终表示进程init。init始终是Linux计算机启动时的第一个进程,它一直保留在系统上,直到计算机关闭。初始化采用他的任何进程的父进程死亡,而无需等待子进程的状态。因此,启动守护进程的常用方法涉及分叉一次或两次,并且在子进程开始执行其正常功能时使父进程死亡。

    一些守护进程通过System V init脚本启动,这些脚本是系统启动时自动运行的脚本,即短程序,它们可以在会话期间存活或者每隔一段时间重新生成。

    许多守护进程现在只在需要时启动,并且由一个守护进程xinetd(已在新系统中替换inetd)启动,而不是连续进行。xinetd称为TCP/IP超级服务器,本身在引导时启动,它侦听分配给/etc/inetd.conf或/etc/xinetd.conf配置文件中列出进程的端口。它启动的守护进程的示例包括crond远程进计划任务,ftpd文件传输,lpd激光打印,rlogind远程登录,rshd远程命令执行,telnetd。

    除了由操作系统和应用程序启动外,还可以手动启动一些守护进程。启动守护进程的程序命令实例包括binlogd二进制事件记录到指定文件,mysqld数据库服务器,apache Apache Web服务器

    在许多类Unix操作系统(包括Linux)中,每个守护程序都有一个脚本(即短程序),可以使用该脚本终止,重新启动或检查其状态。这些脚本的处理基于运行级别运行级别是系统的配置或操作状态,仅允许某些选定的进程存在。引导到不同的运行级别可以帮助解决某些问题,包括修复系统错误。

    二.nohup与守护进程

    nohup是穷人将进程作为守护进程运行的方式,在实践中,当想要启动一个一次性的长时间运行的进程,它应该在shell退出时继续,我们将要使用nohup,但也想要将它与stdin的后台与重定向结合起来。一次性工作不值得制作一个守护进程,但守护进程的某些属性对于nohup作业仍然有用。

    定期安排的定期任务最好通过cron或其他一些调度程序运行。守护进程最适合监督没有可预测的开始时间的重复任务。通常没有明确的守护进程结束时间,它由用户或另一个进程或系统关闭显示停止。守护进程通常是响应应用程序或其他条件的服务。其他守护进程轮询一个条件并执行响应操作。  

    在Unix变体中,进程与终端进程相关联。因此,当终端进程退出时,由于这种关联,该进程也会停止,当终端停止时,nohup会阻止进程退出。而守护进程是一个由系统启动时启动的进程,它运行直到关闭,没有用户明确要求它,因此,守护进程不是用户交互的一部分,而属于系统。

    三.怎样判断进程池中的某个进程是否finished?

    while thread_name is_alive():

      pass——>这将等待线程完成,然后继续执行脚本的下一部分

    或 thread.join()暂停当前处理并等待已启动的线程完成

    一旦线程的活动开始,线程据认为是活着的,当它的run()方法终止时,它会停止活动,或者通过引发未处理的异常,is_alive()方法测试线程是否存活。

    1. python 默认参数创建线程后,不管主线程是否执行完毕,都会等待子线程执行完毕才一起退出,有无join结果一样
    2. 如果创建线程,并且设置了daemon为true,即thread.setDaemon(True),则主进程执行完毕之后自动退出,不会等待子线程的执行结果。而是随着主进程退出,子进程也消亡。
    3. join方法的作用是阻塞,等待子线程结束,join方法有一个参数是timeout,即如果主线程等待timeout,如果子进程还没有结束,则主进程强制结束子进程。
    4. 如果daemon属性为false,则join里的timeout参数并非无效,依旧会阻塞timeout时间,但主线程会一直等待子线程结束
    5. 如果线程daemon属性为True, 则join里的timeout参数是有效的, 主线程会等待timeout时间后,结束子线程。如果同时有N个子线程join(timeout),那么实际上主线程会等待的超时时间最长为 N * timeout, 因为每个子线程的超时开始时刻是上一个子线程超时结束的时刻。

    6. 当join()不写时,主线程自己执行结束后,子线程继续执行
  • 相关阅读:
    os模块
    sys模块
    time时间模块
    collections模块
    修改Jenkins的主目录步骤
    jenkins管理
    求2个集合的差集
    MVC动态二级域名解析
    解决MVC 时间序列化的方法
    MVC修改视图的默认路径
  • 原文地址:https://www.cnblogs.com/karenaqi/p/11306806.html
Copyright © 2011-2022 走看看