現在カーネルモードで実行されているすべてのプロセスを取得するには?

現在カーネルモードで実行されているすべてのプロセスを取得するには?

システムコールに使用されているプロセスを一覧表示するには?コマンドで検索する方法はありますかtop?マニュアルページで適切なオプションが見つかりません。

ベストアンサー1

プロセスの状態は、プロセスが実行している操作を示します。主なプロセス状態は次のとおりです。

  • S:スリープ、つまりシステムコールで何かを待つのをブロックします。プロセスに何が起こるかを覚醒させることができます。
  • D:使用中です。ハードウェアを待っています。中断のない省電力モードです。プロセスは覚醒できず、特定のイベントが発生するまで待つ必要があります。 (キャンセル可能な場合もありますが、必ずしもそうではありません。)
  • R:実行、つまりコードを実行します。これは通常アプリケーションコードなので、ユーザーモードで実行されますが、カーネルで内部的に実行されるいくつかの計算もRでプロセス状態を維持します。

カーネルが内部的に実行する計算は、RまたはD状態にすることができます。私はこれらの計算がリソースを使用しているかどうか(たとえば、コードにロックがあるかどうか)によって異なると思います。 R-in-user-modeとR-in-kernelモードを区別する移植可能な直接的な方法はないと思いますが、おそらく/procLinuxのどこかに方法があるでしょう。

Linux procps の最上位バージョンにはプロセスのステータスが一覧表示されます。ステータスDのプロセスのみをリストするオプションはないようですが、キーまたはコマンドラインオプションを使用して、最後の画面更新以降にアイドル状態のままになっているすべてのプロセスを非表示にできiます-i。プロセス。

PIDのみをリストしたい場合は、出力をフィルタリングできますps

ps -o state=,pid= | sed -n 's/^D //p'

多くのI / Oを実行しないシステムでは、ほとんどの場合、プロセスはゼロとしてリストされます。

おすすめ記事