Linux 具有相同名称的多个进程

Linux 具有相同名称的多个进程,linux,process,ps,Linux,Process,Ps,我有一个运行在Linux 2.6.13和WindRiver Linux 3.0上的应用程序。在Linux 2.6.13中,当我这样做时 ps -eaf | grep myapplication …输出显示“myapplication”的多个条目 如果我在WindRiver Linux 3.0中发出相同的命令,则输出仅显示“myapplication”的一个条目 这种差异是否与所使用的操作系统的差异有关?请告诉我原因?这可能与正在使用的线程库和/或内核版本有关 旧的(现在非常旧的)“Linuxt

我有一个运行在Linux 2.6.13和WindRiver Linux 3.0上的应用程序。在Linux 2.6.13中,当我这样做时

ps -eaf | grep myapplication
…输出显示“myapplication”的多个条目

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


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

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

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

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

这两个库都实现了posix线程API(或多或少;较新的库比较旧的库做得更多)。我希望讨论中的进程是多线程的


如果Linuxthreads在很久很久以前是静态链接的,那么仍然可以看到与它们链接的程序。现代内核对此支持得很好。

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

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

您可以使用“ps-efm”列出与之相关的进程和线程。有些系统显示与可执行文件同名的线程。在这里,您将看到内核线程以“[]”显示

这有点不同,取决于线程库,该库将它传递给clone(),这会影响线程如何显示为“ps”以及其他一些内容(例如它是否有自己的pid)