具有相同名称的多个进程
收藏

我有一个在Linux2.6.13和WindriverLinux3.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,那么仍然可以看到与它们链接的程序。现代的内核可以很好地支持这一点。

    公众号
    关注公众号订阅更多技术干货!