2009-01-15 1 views
2

Solaris에서 시스템 및 프로세스 정보를 수집하는 방법에 대한 C/C++ 라이브러리 및 설명서가 있습니까?Solaris 시스템에서 프로세스 정보를 C/C++에서 프로그래밍 방식으로 얻는 방법?

비록 명령 줄 도구를 구문 분석 할 수 있지만 대신 작업을 쉽게 수행 할 수있는 라이브러리를 사용하고 싶습니다.

감사

편집 : 정보를 수집/proc 디렉토리 가상 디렉터리를 사용하도록 제안하고있다 그러나 그 내가 구현해야합니다 의미에서, 명령 줄 도구를 구문 분석보다 훨씬 더 필요한 모든 데이터 조각에 대한 맞춤 구문 분석의 일종.

저는 C 기반 시스템 API를 통해이 정보를 제공하는 Windows 또는 MacOS 용 C 라이브러리 라인을 따라 뭔가를 찾고 있습니다. 그러나 나는 Google과 아무런 관계가 없습니다.

+0

무엇이 필요합니까? 피디? 메모리/CPU 사용량? 디스크 공간? – user44511

+0

가능한 한 많이 :) –

답변

3

kstat API으로 이러한 종류의 정보를 얻을 수 있습니다.

man -s 3KSTAT kstat 

이 오픈 솔라리스 vmstatiostat 소스에 사용되는 방식을 볼 수 있습니다.

가공 처리에 대한 자세한 내용은 ps을 참조하십시오.

+0

그게 내가 찾고 있던 덕분이야! –

0

나는 확실히이 주제에 대한 전문가는 아니지만, 지난 학기에 우리가 프로세스의 스냅 샷을 찍어야 할 과제와 매우 비슷한 것을했습니다. 불행히도이 방법을 사용하려면 커널에 파고 들어야합니다.

나는 이걸 찾았습니다. article이 도움이되었습니다.

어쨌든 여기에 일부 발췌 문장이 있습니다.

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"유틸리티의 소스로 다이빙을. 나는 리눅스 2.6.18-92.1.13.e15에서 일하고 있었다고 생각한다. 면책 조항 : 이것은 나를 위해 일했지만 귀하의 마일리지는 다를 수 있습니다. 나는 벽에서 떨어져있을 수 있으며 잘못된 방향으로 인도하려고하지 않습니다.

1

Solaris에는 파일 시스템 I/O 기능을 사용하는 프로세스에 대한 모든 종류의 정보를 수집 할 수있는 /proc virtual directory이 있습니다.

1

나는 CrashWorks에서 제안한대로/proc virutal 디렉토리를 사용합니다. 나는 aux와 linux 모두에서이 작업을 수행했다. 한가지 명심해야 할 것은/proc 디렉토리에서 커널의 파일 형식이 다양하다는 것입니다.

솔라리스 측면에서 어떤 상황인지 모르겠지만 솔라리스 플랫폼에서 솔라리스 플랫폼으로 이식 할 수 없다는 것을 의미합니다.

+0

Linux 파일은 텍스트 인 경향이 있습니다. 솔라리스에는 바이너리 정보가 들어있다. –

+0

실제로. Solaris의이 시점에서 안정적인 인터페이스가 보장되는 것은 아니지만 proc.h와 친구들에게서 필요한 모든 것을 얻을 수 있습니다. –

관련 문제