具有相同名称的多个进程

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

ps -eaf | grep myapplication

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

如果我在WindRiver Linux 3.0中给出相同的命令,则输出只显示“myapplication”

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

Solutions Collecting From Web of "具有相同名称的多个进程"

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

旧的(现在很老的)“Linux线程”线程库,用来将每个线程显示为“顶级”进程,直接出现在/ proc下,并具有不同的PID。 这是它的许多缺点之一,

多年来被包括在每个新发行版中的新的(现在不是很新的)“NPTL”线程库可以使用内核特征使线程显示在相同的PID下。 线程仍然在那里,但现在在/ proc中的“任务”子目录下,所以通常被“ps”忽略(如果需要,您可以通过适当的选项来看到它们)。

这两个库都实现了posix线程API(或多或少;新版本比旧版本更多)。 我预计这个过程是多线程的。

如果Linux线程长时间以前是静态链接的,那么仍然可以看到与Linux线程链接的程序。 现代内核支持这一点很好。

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

在Linux中,一个线程的执行与完整的进程并没有太大的区别,请参阅man clone 。 我怀疑你只是用不同的默认设置使用两个不同的ps命令。 ps --help会告诉你如何列出每个进程的每个线程。

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