2010-11-10 83 views
1

我有一个在Linux 2.6.13和WindRiver Linux 3.0上运行的应用程序。在Linux的2.6.13当我做...具有相同名称的多个进程

ps -eaf | grep myapplication 

...输出显示 '所有MyApplication' 的多个条目。

如果我给在风河Linux 3.0的相同的命令,输出显示是用于与在OS的差分唯一一个“为MyApplication”

的入口?请告诉我这个的原因?

回答

5

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

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

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

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

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

+0

Mark,Ya在我的情况下,这个过程是多线程的 – 2010-11-10 15:31:58

0

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

0

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

+1

它有点不同,它依赖于线程库,它将标志传递给clone(),它影响线程看起来如何“ps”和其他一些东西比如它是否有自己的pid) – MarkR 2010-11-10 15:01:50

0

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

相关问题