我有一个在 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 中的“任务”子目录下,因此通常会被“ps”忽略(如果需要,您仍然可以通过适当的选项查看它们)。
这两个库都实现了 posix 线程 API(或多或少;新的比旧的多)。我希望有问题的进程是多线程的。
如果很久很久以前静态链接的程序,仍然可以看到与 Linuxthreads 链接的程序。现代内核支持这一点很好。
关于linux - 同名的多个进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4145318/