2

C / C ++ライブラリ、およびSolarisでシステムおよびプロセス情報を収集する方法に関するドキュメントはありますか?

コマンドラインツールを解析することはできますが、タスクを実行しやすくするライブラリを使用したいと思います。

ありがとう

編集:情報を収集するために/ proc仮想ディレクトリを使用することが提案されていますが、すべてのデータに対して何らかのカスタム解析を実装する必要があるという意味で、コマンドラインツールの解析よりもはるかに優れています。必要。

WindowsまたはMacOS用のcライブラリに沿って、cベースのシステムAPIを介してこの情報を提供するものを探していますが、Googleには不運があります。

4

5 に答える 5

3

この種の情報はkstat APIで取得できます。

man -s 3KSTAT  kstat

OpenSolaris vmstatiostatのソースでどのように使用されているかを確認できます。

processus に関する情報については、psを参照してください。

于 2009-01-15T16:11:21.513 に答える
1

どうgetrusage()ですか?

于 2009-01-15T03:42:28.887 に答える
1

Solaris には/proc 仮想ディレクトリがあり、ファイルシステム I/O 関数を使用してプロセスに関するあらゆる種類の情報を収集できます。

于 2009-01-15T03:01:16.443 に答える
1

CrashWorks が提案したように、/proc 仮想ディレクトリを使用します。私はauxとlinuxの両方でこれを行いました。心に留めておくべきことの 1 つは、Linux で /proc ディレクトリを使用したとき、ファイルの形式がカーネルごとに異なることです。

Solaris 側の状況がどのようなものかはわかりませんが、これは、あるソラリス プラットフォームから別のソラリス プラットフォームにソリューションを移植できないことを意味する可能性があります。

于 2009-01-15T03:12:47.357 に答える
0

私は間違いなくこのテーマの専門家ではありませんが、前学期にプロセスのスナップショットを撮る必要があったときに、非常に似たようなことをしました。残念ながら、この方法ではカーネルを掘り下げる必要がありますが、これはおそらくやりたいことではありません。

この記事は役に立ちました。

とにかく、ここにいくつかのスニペットがあります。

 write_lock_irq(&tasklist_lock);
  for_each_process(task) {

    if (system_or_user == 0)
      print_mem_user(task);
    if (system_or_user == 1)
      print_mem_system(task);
  }
  write_unlock_irq(&tasklist_lock);

いくつかのデータ構造をロックダウンする必要があるか、カーネルがハングすることがあります。「for_each_process」はどこかで定義されたマクロですが、どのように機能するか覚えていません D:

static void print_mem_system(struct task_struct *task)
{
  struct mm_struct *mm;

  if (task -> mm == NULL){ // this is how you distinguish system processes from user processes
    myarraypid[totalnumberofprocesses] = task -> pid; // store process id's into myarraypid[], which you can later copy back to user space for printing/display. Additional information would be found in a "task_struct" which is Linux's implementation of a process. 



  }


}

クラスメートの何人かは、異なるアプローチを取り、"ps" ユーティリティのソースに飛び込みました。Linux 2.6.18-92.1.13.e15 で作業していたと思います。免責事項:これは私にとってはうまくいきましたが、マイレージは異なる場合があります. 私は壁から外れている可能性が非常に高く、あなたを間違った方向に導きたくありません.

于 2009-01-15T02:45:23.650 に答える