zoukankan      html  css  js  c++  java
  • 写一些对于Linux进程的浅陋知道笔记。

    对于进程与线程很多时候,我觉的我还是停留在概念的阶段。也就知道一个进程是操作系统分配的资源,每个进程至少要有一个线程,进程与进程之间都是独立的等等,其实文字下面的意思,很多我都不是很了解,也没有能力动手实践。

    最近在学习docker,主要查看了pstree -p的命令,看到了进程树,让我对进程产生了很大的好奇。

    首先我个人简单的理解,一个进程的启动,必须有一个父进程来启动,当然启动进程方式有很多,网上有很多介绍,我也看的云里雾里,就不详细写了。

    一般的进程分为守护进程与非守护进程,在Python的代码中,可以通过代码实现,知道守护进程将跟随着父进程的关闭而关闭,但非守护进程不会,他应该会称为所谓的孤儿进程被操作系统编号为1的进程托管,也就是他的父进程变成了编号为1的进程。

    当我们打开shell,在终端运行各种脚本的时候,其实shell中运行的bash就是你在shell中运行的所有进程的父进程,所以不管你是前台工作,还是后台通过&运行,只要shell一关闭,bash就会给自己下面的所有子进程发送关闭信号,告诉他们我要死了,你们陪我殉葬吧,因为那些在shell中运行的进程都是bash的子进程,而且都是守护进程,那也就只能乖乖的跟着一起死了。

    那难道让服务器运行一个脚本一定要一直开着shell,运行bash吗?答案肯定是否定的,其实关闭子进程只不过是向子进程发送了一个信号,也就是所谓的kill信号,这个具体我也不识很了解,就好比打了个电话告诉子女,你们可以去陪我死了。

    理解了这个,就很好理解nohup了,nohup就是忽略父进程的信号,你她妈爱死不死,我假装没听到。这样的情况下,当bash退出,那些运行hup的忽略信号的子进程就会认1号进程也就是差不多我理解老大进程做爸爸。

    Python中所谓的非守护进程,我不知道底层是不是也是通过忽略父进程的关闭信号来实现,父进程死了,子进程继续玩自己的,我觉的应该是。

    水平实在有限,等有新的感悟,或者发现错误再来更改。

  • 相关阅读:
    spring服务器的校验
    数据库中文到页面乱码 添加一个过滤器
    springmvc的form标签
    EasyUI触发方法、触发事件、创建对象的格式??
    JQuery如何获取按键的unicode编码?
    StringBuilder的append、StringBuffer的append和String str = "a"+"b"的区别?
    简述什么是ajax、javascript、json、Jquery?
    oracle分页
    Github的基本功能:
    Springmvc和struts2的区别?
  • 原文地址:https://www.cnblogs.com/sidianok/p/14681304.html
Copyright © 2011-2022 走看看