【问题标题】:Multiple processes with the same name多个同名进程
【发布时间】:2018-03-05 00:35:23
【问题描述】:

我有一个在 Linux 2.6.13 和 WindRiver Linux 3.0 上运行的应用程序。当我在 Linux 2.6.13 中...

ps -eaf | grep myapplication

...输出显示“myapplication”的多个条目。

如果我在 WindRiver Linux 3.0 中给出相同的命令,输出只会显示一个“myapplication”条目

差异是否与所使用操作系统的差异有关?请告诉我这是什么原因?

【问题讨论】:

    标签: linux process ps


    【解决方案1】:

    这可能与正在使用的线程库和/或内核版本有关。

    旧的(现在非常旧的)“Linuxthreads”线程库,用于将每个线程显示为“顶级”进程,它直接出现在 /proc 下并具有不同的 PID。这是其众多缺点之一,已通过以下方式解决:

    新的(现在不是很新的)“NPTL”线程库,多年来一直包含在每个新发行版中,可以使用内核特性使线程出现在相同的 PID 下。线程仍然存在,但现在位于 /proc 中的“task”子目录下,因此通常会被“ps”忽略(如果需要,您仍然可以通过适当的选项看到它们)。

    这两个库都实现了 posix 线程 API(或多或少;新的比旧的做得更多)。我预计有问题的进程是多线程的。

    如果很久很久以前静态链接的程序,仍然可以看到与 Linuxthreads 链接的程序。现代内核很好地支持这一点。

    【讨论】:

      【解决方案2】:

      也许grep myapplication 也被列出,这就是为什么有多个条目。如果没有,这取决于您的应用程序正在做什么,可能会调用自身等。您需要提供更多信息,或者至少提供ps -eaf | grep myapplication 输出。

      【讨论】:

        【解决方案3】:

        在 Linux 中,线程的实现与完整进程没有太大区别,请参阅man clone。我怀疑您只是在使用两个不同的 ps 命令,并具有不同的默认设置。 ps --help 将向您展示如何列出每个进程的每个线程。

        【讨论】:

        • 有点不同,取决于线程库,它传递给 clone() 的标志,这会影响线程在“ps”和其他一些东西上的显示方式(例如它是否有它的自己的pid)
        【解决方案4】:

        您可以使用“ps -efm”列出与之关联的进程和线程。一些系统显示与可执行文件同名的线程。在那里你会看到内核线程显示为“[]”。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-02
          • 1970-01-01
          相关资源
          最近更新 更多