【问题标题】:Why zombie process disappears from htop if i don't call waitpid()?如果我不调用 waitpid(),为什么僵尸进程会从 htop 中消失?
【发布时间】:2021-10-19 15:40:51
【问题描述】:
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

int main()
{
        int pid = fork();
        if (pid == 0)
        {
                printf("I am Child\n");
                exit(0);
        }
        printf("I am Parent\n");
        while(1);
}

当我运行此代码时,我的 Linux 上会发生以下情况:僵尸进程在 htop 中显示一秒钟,然后就消失了。 我尝试在父级中设置信号处理程序:

void callback(int signum)
{
    return;
}

int main()
{
        int pid = fork();
        if (pid == 0)
        {
                printf("I am Child\n");
                exit(0);
        }
        printf("I am Parent\n");
        signal(SIGCHLD, callback);
        while(1);
}

但没有任何改变。为什么我的僵尸进程从 htop 中消失了?

P.S.:编译时没有优化

更新:它不会出现在htop,但会出现在top。对我来说似乎是一个错误。我投票赞成删除这个问题。

【问题讨论】:

  • 尝试运行ps | grep pts,您可能会看到。
  • @dbush 不,什么都不输出
  • ps -u &lt;your userid&gt; --forest 也应该让僵尸脱颖而出。我希望它不会从 htop 的列表中消失,它一直在底部(并且可能被终端窗口的高度隐藏),因为它没有使用任何资源。
  • 如果你在与进程不同的终端,运行ps aux | grep &lt;name of binary&gt;,你应该会看到两个进程,其中一个已经失效。
  • @zwol 感谢该命令有效,僵尸显示为 。但它实际上已从 htop 消失

标签: windows-subsystem-for-linux zombie-process waitpid htop


【解决方案1】:

该进程从htop 中消失,因为默认情况下它按 CPU 使用率排序,因此僵尸进程将在列表中远远低于屏幕。

它在一秒钟后发生,因为这是默认的 htop 刷新间隔。

【讨论】:

  • 不远了。我没有很多进程正在运行。即使我按命令名称使用过滤器,它也没有出现。只是不在列表中。
  • 您是说htop 运行时在底部看到多个空行是因为它没有足够的进程来填满屏幕吗?
  • 正确。它没有出现在htop 中,而是出现在top 中,因为我刚刚对其进行了测试。
  • 这很奇怪。当我按状态反转排序时,它会显示在我的htop 中。如果您从top 获取pid 并运行htop -p thatpid,会发生什么?
  • htop -p thatpid 的结果是空白进程列表。
猜你喜欢
  • 2014-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-11
  • 2013-05-01
  • 1970-01-01
  • 2012-11-09
  • 1970-01-01
相关资源
最近更新 更多