我在Linux 2.6.13和WindRiver Linux 3.0上运行了一个应用程序。在Linux 2.6.13中我做...
ps -eaf | grep myapplication
...输出显示'myapplication'的多个条目。
如果我在WindRiver Linux 3.0中提供相同的命令,输出只显示'myapplication'的一个条目
差异与操作系统的差异有关吗?请告诉我原因?
答案 0 :(得分:6)
它可能与正在使用的线程库和/或内核版本有关。
旧的(现在很旧的)“Linuxthreads”线程库,用于将每个线程显示为“顶级”进程,它直接出现在/ proc下并具有不同的PID。这是它的许多缺点之一,由以下原因解决:
新的(现在不是很新的)“NPTL”线程库,已经包含在每个新发行版中多年,可以使用内核功能使线程出现在同一个PID下。线程仍在那里,但现在位于/ proc中的“task”子目录下,因此通常会被“ps”忽略(如果需要,您仍可以使用相应的选项查看它们。)
这两个库都实现了posix线程API(或多或少;新版本比旧版本更多)。我希望有问题的流程是多线程的。
如果很久很久以前它们是静态链接的,那么仍然可以看到与Linuxthreads链接的程序。现代内核支持这一点很好。
答案 1 :(得分:0)
也许列出了grep myapplication
,这就是为什么有多个条目。如果没有,则取决于您的应用程序正在做什么,可能是自己调用等等。您需要提供更多信息,或者至少ps -eaf | grep myapplication
输出。
答案 2 :(得分:0)
在Linux中,线程的实现与完整过程没有太大区别,请参阅man clone
。我怀疑你只是使用两个不同的ps
命令和不同的默认设置。 ps --help
将向您展示如何列出每个流程的每个主题。
答案 3 :(得分:0)
您可以使用“ps -efm”列出与其关联的进程和线程。某些系统显示与可执行文件同名的线程。在那里你会看到内核线程显示为“[]”。