2011-01-30 13 views

答えて

2

Linuxでは、プロセス情報について疑似ファイルシステム/procを調べることができます。つまり、opendir()の機能を使用し、数字であるサブディレクトリを探すことです。これは、システム上で実行されている各プロセスのプロセス識別子です。各サブディレクトリには、プロセスに必要な権限があれば、open()/read()を使用して開いたり読むことができる多数のファイルがあります。

procのあなたに利用可能な情報の詳細は、(5)

manページを参照してください。

0

あなたはただリストする必要があります/proc/ディレクトリ=)私のquestionは多分あなたのために役立つかもしれません。

+0

Unixでは*フォルダ*はありません。 – tchrist

+0

@tchrist、より具体的にしてください。 – shybovycha

+0

Unixにはフォルダがありますが、フォルダはありません。フォルダーは私たちにベビートークのように聞こえる。 – tchrist

0

プロセス情報を見つける基準はありません。各Unixベンダーは、システム管理者に情報を提供する独自のメカニズムを提供します。

LinuxとSolarisは、プロセスの情報をユーザー空間にエクスポートするためにファイルシステム/proc/を使用しますが、それらはすべて互換性がないと思います。 (私は、Solarisがカーネル内の処理を取り除くためにバイナリ形式ですべての情報をエクスポートすることにした漠然とした想いを持っていますが、ユーザ空間プログラムとカーネルのデータ構造をより緊密に結びつける代わりに、カーネルを覗いてプロセステーブルを読み込むためのメモリ、これ以上は必要ないとは思いますが、歴史的な知識はまだ残っています)

プラットフォーム固有の場合は、Linux proc(5)マンページに必要。ハッピーハッキング:)

+0

また、BSDシステムでは、それをまったく使用しないと、縮小されたprocfsレイアウトまたは異なるprocfsレイアウトが使用されます。これにはMacOS *née* Darwinも含まれます。 – tchrist

0

psのマニュアルページから、ps -eを使用してすべてのプロセスを標準形式で一覧表示し、ps axを使用してすべてのプロセスをBSD形式でリストすることができます。

希望に役立ちます。

1

これには仕上げの解決策があります。

それはgitのを使用して、あなたがやりたいhttps://sourceforge.net/p/readproc/code/ci/master/tree/

クローンを参照してください。

#include"read_proc.h" 
int main(void) 
{ 
    struct Root * root=read_proc(); 
    struct Job * buffer; 
    int i=0; 
    for(;i<root->len;i++) 
    { 
     buffer=get_from_place(root,i); 
     printf("%s\t%u\n",buffer->name,buffer->pid); 
    } 
    return 0; 
} 
+0

このリンクは質問に答えるかもしれませんが、答えの本質的な部分をここに含めて参考にしてください。リンクされたページが変更された場合、リンクのみの回答は無効になります。 –

+0

ソースフォージサーバーが現在停止しています。 – LittleByBlue

1

PSis the standard、良くも悪くも。クロスプラットフォームでの出力の解析を簡素化できる、多くの不満足なフォーマットオプションがあります。

/procは、より便利ですが、移植性が低く、サポートされている場合でもローカルでは使用できない可能性があります(chroot環境)。

関連する問題