2010-11-10 44 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」列出與它們關聯的進程和線程。一些系統顯示與可執行文件同名的線程。你會看到內核線程顯示爲「[]」。

相關問題