• 守护进程, 协同进程, 僵尸进程, 孤儿进程概念理解


    守护进程

    没有控制终端, 运行在后台的特殊进程, 用于执行特定的系统任务, 这样的进程称为守护进程.
    守护进程长期生存, 常在系统引导时装入启动. 一般的网络服务, 都是以守护进程形式存在提供服务.
    用户层守护进程的父进程是init进程(pid = 1).
    守护进程查看方式:
    基于BSD的系统, 执行shell命令

    $ ps -axj
    

    基于System V的系统, 执行命令 (只能查看当前用户的进程)

    $ ps -efj
    

    守护进程名称通常以d结尾.

    协同进程

    协同进程的概念

    APUE 15.4的描述是

    UNIX系统过滤程序从标准输入读取数据, 向标准输出写数据. 几个过滤程序通常在shell管道中连接. 当一个过滤程序既产生某个过滤的输入, 又读取该过滤程序的输出时, 它就变成了协同进程(coprocess).

    这里注意到是"它就变成了协同进程", 也就是说协同进程是一个, 而非两个, 而且是从标准输入、标准输出的那个. 协同进程就好像帮助另一个进程接收标准输入并过滤, 处理输出数据并输出到标准输出设备一样.

    然而, 协同进程仅仅指是过滤标准输入、输出的过滤器进程吗?

    过滤程序

    什么是过滤程序?

    过滤程序是流(stream)处理程序,它们从标准输入读取流数据,对其进行适当处理后写到标准输出。标准输入默认来自键盘,不过可以重定向到一个文件或者来自其它程序的输出。标准输出默认是显示器,当然也可以重定向到一个文件,也可以是其它设备(例如打印机),或者重定向到管道作为其他程序的输入等。通常情况下,几个过滤程序在SHELL管道命令行(|)中线性地连接。
    最常用的过滤程序有grep,cat,awk,head,sed,less,more等。

    参考APUE协同进程的讨论 | CSDN

    例子

    下图是一个简单的协同进程的例子, 进程创建2个管道: 协同进程的标准输入, 协同进程的标准输出

    僵尸进程

    当一个子进程终止时(正常终止或异常终止), 停止活动, 但占用的存储资源尚未释放, 此时子进程称为僵尸进程.
    父进程通过调用wait/waitpid阻塞等待子进程终止, 回收子进程其资源, 子进程才会完全消亡.

    僵尸进程可以通过ps命令查看到, 但无法用kill命令杀死, 因为此时僵尸进程已经"死了".
    top命令查看CPU实时进程情况

    $ top
    

    ps命令查看僵尸进程的相关信息

    $ ps -e -o stat,ppid,pid,cmd|egrep '^[Zz]'
    

    结束僵尸进程的方法: 使用kill命令终结父进程. 父进程终结时, 子进程会被init进程收养, 如果是僵尸进程会立即回收资源.

    参考 top发现僵尸进程

    孤儿进程

    对于一个正常运行的子进程, 当其父进程终止时, 子进程就变成孤儿进程. 孤儿进程会被init进程收养, 运行终止时, init进程会立即回收其资源.

  • 相关阅读:
    java 多线程 this
    sping PropertyPlaceholderConfigurer
    dubbo 各功能模块介绍及配置方式
    dubbo配置概述
    struts2 之 【struts2简介,struts2开发步骤,struts2详细配置,struts2执行流程】
    曾经,真的很喜欢你
    Arcgis for Javascript 对接iServer发布的Mapserver服务
    SuperMap iClient for JavaScript image出图
    SuperMap-iServer过滤请求返回值
    tomcat闪退解决
  • 原文地址:https://www.cnblogs.com/fortunely/p/14792170.html
Copyright © 2020-2023  润新知