2011-11-15 7 views
5

내 시스템 (C/C++ 기반) 프로그램이 현재 얼마나 많은 프로세스가 로컬 시스템에 있는지에 대한 숫자 지시자를 표시하고 싶습니다. 실행중인 프로세스 수 값은 디스플레이를 업데이트하기 위해 자주 (예 : 1 초에 한 번) 쿼리됩니다.Linux에서 현재 프로세스 수를 얻을 수있는 간단한 방법이 있습니까?

해당 숫자를 가져 오는 간단한 방법이 있습니까? 분명히 "ps ax | wc -l"이라고 부를 수는 있지만, 컴퓨터에 프로세스를 생성시키고 수백 개의 텍스트 행을 구문 분석하여 단일 정수가 나오도록 강요하지 않으려합니다.

이 프로그램은 주로 Linux에서 실행되지만 MacOS/X 또는 Windows에서도 실행될 수 있으므로 해당 운영 체제와 관련된 기술도 유용합니다. 이상적으로는 리눅스에서 사용할 수를 제외하고 this 같은 뭔가를 찾고 있어요

제레미

+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 
} 
[실행중인 프로세스를 나열 리눅스 API?]의
+0

+1, 그건 내 제안보다 훨씬 쉽습니다. –

3

opendir("/proc")

감사 및 항목의 수를 계산 (getsysinfo()는 미닉스 일이 더있을 것으로 보인다) 이들은 디렉토리이며 숫자 전용 이름을가집니다.

관련 문제