3

Linux 2.6.13 および WindRiver Linux 3.0 でアプリケーションを実行しています。Linux 2.6.13 では...

ps -eaf | grep myapplication

...出力には、「myapplication」の複数のエントリが表示されます。

WindRiver Linux 3.0 で同じコマンドを実行すると、出力には「myapplication」のエントリが 1 つだけ表示されます。

違いは、使用しているOSの違いに関係していますか? この理由を教えてください。

4

4 に答える 4

6

おそらく、使用中のスレッド ライブラリおよび/またはカーネル バージョンに関連しています。

古い (現在は非常に古い) "Linuxthreads" スレッド ライブラリは、各スレッドを "トップレベル" プロセスとして表示するために使用され、/proc の直下に表示され、個別の PID を持ちます。これは多くの欠点の 1 つであり、次の方法で修正されました。

長年にわたってすべての新しいディストリビューションに含まれてきた新しい (現在はそれほど新しくはない) "NPTL" スレッド ライブラリは、カーネル機能を使用してスレッドを同じ PID の下に表示させることができます。スレッドはまだそこにありますが、現在は /proc の「タスク」サブディレクトリの下にあるため、通常は「ps」によって無視されます (必要に応じて、適切なオプションを使用して表示できます)。

どちらのライブラリも posix スレッド API を実装しています (多かれ少なかれ、新しいものは古いものより多くのことを行います)。問題のプロセスはマルチスレッドであると思います。

ずっと前に静的にリンクされていた場合でも、Linuxthreads にリンクされたプログラムを見ることができます。最新のカーネルはこれをうまくサポートしています。

于 2010-11-10T14:14:07.183 に答える
0

おそらくgrep myapplicationもリストされているため、複数のエントリがあります。そうでない場合は、アプリケーションが何をしているか、おそらく自分自身を呼び出しているかなどによって異なります。より多くの情報を提供するか、少なくともps -eaf | grep myapplication出力する必要があります。

于 2010-11-10T14:14:37.923 に答える
0

「ps -efm」を使用して、それらに関連付けられているプロセスとスレッドを一覧表示できます。一部のシステムでは、実行可能ファイルと同じ名前のスレッドが表示されます。そこには、カーネル スレッドが "[ ]" で示されていることがわかります。

于 2010-11-10T14:58:59.780 に答える
0

Linux では、スレッドの実装は完全なプロセスと大差ありません。 を参照してくださいman clonepsデフォルト設定が異なる2つの異なるコマンドを使用しているだけだと思います。ps --helpすべてのプロセスのすべてのスレッドを一覧表示する方法を示します。

于 2010-11-10T14:20:14.810 に答える