2010-11-10 8 views
1

J'ai une application fonctionnant sur Linux 2.6.13 et WindRiver Linux 3.0. Sous Linux 2.6.13 quand je le fais ...Plusieurs processus avec le même nom

ps -eaf | grep myapplication 

... la sortie affiche plusieurs entrées de 'myapplication'.

Si je donne la même commande dans WindRiver Linux 3.0, la sortie ne montre qu'une seule entrée de monapplication

est la différence liée à la différence de système d'exploitation utilisé? Veuillez me dire la raison de ceci?

Répondre

5

Cela est probablement lié à la bibliothèque de threads utilisée et/ou à la version du noyau.

L'ancienne bibliothèque de threads "Linuxthreads", utilisée pour montrer chaque thread comme un processus de "niveau supérieur", qui apparaîtrait directement sous/proc et qui aurait un PID distinct. Cela a été l'un de ses nombreux inconvénients, qui ont été corrigés par:

La nouvelle bibliothèque de threads "NPTL" (qui n'est pas nouvelle), incluse depuis de nombreuses années dans chaque nouvelle distribution, peut utiliser les fonctionnalités du noyau les threads apparaissent sous le même PID. Les threads sont toujours là mais sont maintenant sous un sous-répertoire "task" dans/proc donc sont normalement ignorés par "ps" (Vous pouvez toujours les voir si vous voulez, avec une option appropriée).

Les deux bibliothèques implémentent l'API des threads posix (plus ou moins, les plus récents font plus que les plus anciens). Je m'attends à ce que les processus en question soient multithread.

Il est toujours possible de voir des programmes liés à Linuxthreads s'ils ont été liés statiquement il y a très, très longtemps. Les noyaux modernes supportent cela très bien.

+0

Mark, Ya le processus dans mon cas est multithread –

0

Peut-être grep myapplication est également répertorié et c'est pourquoi il existe plusieurs entrées. Si ce n'est pas le cas, cela dépend de ce que fait votre application, peut-être qu'elle s'appelle, etc. Vous devrez fournir plus d'informations, ou au moins ps -eaf | grep myapplication.

0

Sous Linux, l'implémentation d'un thread n'est pas très différente d'un processus complet, voir man clone. Je suppose que vous utilisez simplement deux commandes ps différentes avec un réglage par défaut différent. ps --help va vous montrer comment lister chaque thread de chaque processus.

+1

Il est un peu différent et dépend de la bibliothèque de threads, qui signale qu'il passe à clone(), qui affecte la façon dont le thread apparaît à "ps" et d'autres choses (comme si elle a son propre pid) – MarkR

0

Vous pouvez utiliser "ps -efm" pour lister les processus et les threads qui leur sont associés. Certains systèmes affichent des threads portant le même nom que l'exécutable. Là, vous verrez que les threads du noyau sont affichés avec "[]".

Questions connexes