zoukankan      html  css  js  c++  java
  • 守护进程, 协同进程, 僵尸进程, 孤儿进程概念理解

    守护进程

    没有控制终端, 运行在后台的特殊进程, 用于执行特定的系统任务, 这样的进程称为守护进程.
    守护进程长期生存, 常在系统引导时装入启动. 一般的网络服务, 都是以守护进程形式存在提供服务.
    用户层守护进程的父进程是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进程会立即回收其资源.

  • 相关阅读:
    Testlink1.9.17使用方法( 第三章 初始配置[配置用户、产品] )
    Testlink1.9.17使用方法(第二章 登录&汉化设置)
    Testlink1.9.17使用方法(第一章 前言)
    TestLink-Windows安装教程
    Linux-Redmine安装方法
    怎么使用Fiddler进行抓包
    配置ADB到Windows环境变量
    Android获取定位权限,获取设备所在的经纬度
    Paint.FontMetrics
    Bitmap上下合成图片
  • 原文地址:https://www.cnblogs.com/fortunely/p/14792170.html
Copyright © 2011-2022 走看看