2011-11-15 10 views
5

私は自分の(C/C++ベースの)プログラムに、現在ローカルシステム上にいくつのプロセスが存在しているかの数値指標を表示したい。実行中のプロセス数の値は、ディスプレイを更新するために頻繁に(たとえば、1秒に1回)クエリされます。Linuxで現在のプロセス数を取得するための軽量な方法はありますか?

この番号を取得するための軽量な方法はありますか?明らかに私は "ps ax | wc -l"と呼ぶことができますが、コンピュータにプロセスを生成させ、数百行のテキストを解析して単一の整数を出すようにしたくなりません。

このプログラムは主にLinux上で実行されますが、MacOS/XまたはWindowsでも動作するため、これらのOSに関連する技術も役立ちます。

理想的には、私はLinuxで利用可能除き、thisのようなものを探しています(にgetsysinfoは()のMinixの事をもっとように見える)

おかげで、 ジェレミー

+0

可能複製(http://stackoverflow.com/questions/939778/linux-api-to-list-running-processes) –

+0

ここのように:[HTTP: //stackoverflow.com/questions/939778/linux-api-to-list-running-processes]? –

+1

私は実行中のプロセスのリストを望んでいませんが、カウントだけです。 –

答えて

12

....そして質問を投稿してから1分後に、私は答えを見つけます:sysinfoは、(いくつかの中で)いくつのプロセスがあるかを示すフィールドを返します。

しかし、誰かがsysinfo()に相当するMacOS/Xおよび/またはWindowsを知っていれば、私はまだそれに興味があります。


更新:私が最終的に終わった機能は次のとおりです。

#ifdef __linux__ 
# include <sys/sysinfo.h> 
#elif defined(__APPLE__) 
# include <sys/sysctl.h> 
#elif defined(WIN32) 
# include <Psapi.h> 
#endif 

int GetTotalNumProcesses() 
{ 
#if defined(__linux__) 
    struct sysinfo si; 
    return (sysinfo(&si) == 0) ? (int)si.procs : (int)-1; 
#elif defined(__APPLE__) 
    size_t length = 0; 
    static const int names[] = {CTL_KERN, KERN_PROC, KERN_PROC_ALL, 0}; 
    return (sysctl((int *)names, ((sizeof(names)/sizeof(names[0]))-1, NULL, &length, NULL, 0) == 0) ? (int)(length/sizeof(kinfo_proc)) : (int)-1; 
#elif defined(WIN32) 
    DWORD aProcesses[1024], cbNeeded; 
    return EnumProcesses(aProcesses, sizeof(aProcesses), &cbNeeded) ? (cbNeeded/sizeof(DWORD)) : -1; 
#else 
    return -1; 
#endif 
} 
[実行中のプロセスをリストする、LinuxのAPI?]の
+0

+1、それは私の提案よりもずっと簡単です。 –

3

opendir("/proc")とエントリの数を数えますそれらはディレクトリであり、数字のみの名前を持っています。

関連する問題