AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 519463
Accepted
TimSch
TimSch
Asked: 2019-05-18 02:22:54 +0800 CST2019-05-18 02:22:54 +0800 CST 2019-05-18 02:22:54 +0800 CST

WSL - 僵尸进程的不同行为

  • 772

我只是在玩 WSL 上的僵尸进程。我写了一个非常简单的程序:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#define CHILD 0

int main(){
        int p;
        p = fork();
        if(p == CHILD){
                printf("Kind-PID: %u\n", getpid());
                exit(1);
        } else if(p > CHILD){
                sleep(30);
        }
        else return EXIT_FAILURE;
        return EXIT_SUCCESS;
}

虽然我可以在本机 Linux 上使用ps看到僵尸进程,但在 WSL 上看不到僵尸进程。谁能解释为什么?

windows-subsystem-for-linux zombie-process
  • 1 1 个回答
  • 776 Views

1 个回答

  • Voted
  1. Best Answer
    telcoM
    2019-05-18T08:30:10+08:002019-05-18T08:30:10+08:00

    免责声明:我对 WSL 的内部运作一无所知。我对 Windows 进程生命周期细节的了解只是快速谷歌搜索的结果。随时纠正我。

    在 Linux 中,进程状态以 Unix 风格使用其进程表条目进行跟踪,该条目确定其 PID 号。因此,当一个进程死亡时,进程表条目不能被清除,直到(真正的或被采用的)父进程读取死进程的退出代码 - 保持 PID 号被占用。表明进程已经死亡但尚未读取退出代码的进程表条目被称为处于僵尸状态。系统中的所有进程都可以访问此状态和进程表中的各种其他信息位。

    在 Windows 中,进程信息由进程句柄访问。此外,正在运行的进程也有一个进程 ID。当进程死亡时,PID 号可以立即回收,因为退出代码将与死亡进程的句柄一起存储,与 PID 号分开管理。与 PID 号不同,进程句柄在其持有者关闭它之前将一直有效;它所指的进程的死亡不会使进程句柄无效。

    为了忠实地显示 WSL 中“僵尸”状态的等价物,WSLps命令必须检查所有其他 WSL 进程的句柄以找到僵尸进程,然后以某种方式获取进程曾经拥有的 PID 号它们是活动的 - 将不再存在的信息,除非 WSL 子系统在进程活动时专门从 Windows 进程表中复制它。

    但是进程句柄不一定必须是公共信息:根据 WSL 的实现方式,WSL 进程可能只能看到它自己的子进程的僵尸,只能看到属于同一用户的僵尸,或者可能是任何用户的僵尸。仅 WSL 进程。为了重现 Unix 风格的僵尸进程的外观,WSL 可能必须保留系统上每个 WSL 进程的句柄。

    但理论上,死 WSL 进程的 Windows PID 可能会被回收到另一个活进程,而死 WSL 进程的(实际或采用的)父进程在读取死进程的退出代码之前会花些时间。那么 WSL 应该报告什么作为僵尸的 PID 呢?报告已经被另一个生命进程使用的 PID 显然是错误的做法;为僵尸报告与活着时实际不同的 PID 也不正确。

    由于实际上您对僵尸进程几乎无能为力,并且僵尸进程不会弄乱 PID 编号空间,因此对于 WSL来说,对于像这样的命令,完全不尝试完全重现僵尸进程的概念ps可能是一个有效的选择.

    • 1

相关问题

  • SSH linux子系统windows 10

  • Bash For循环不起作用

  • SSH进入同一网络上的两台不同机器[关闭]

  • 在 Bash 中绑定 ALT-F4 以退出的方法(Windows 上的 Ubuntu 上的 Bash)

  • 适用于 Linux 的 Windows 子系统上的 OpenZFS

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve