유닉스는 공통적으로 /dev/mem, /dev/kmem을 통해 주 메모리 이미지를 떠놓습니다.
원천적으로는 이 파일을 읽어서 프로세스 정보 및 커널 통계정보들을 가져오는데
복잡하죠. byte array를 뒤져야 하니까요.
제가 많이 싫어하는 aix4.x 에서는 프로세스 정보를 가져오기 위해서는 mem 파일을 뒤집니다.
솔라리스와 리눅스에서는 이 불편을 해소하고자, proc라는 인터페이스를 만든거죠
사용은 간단합니다.
proc/pid 번호/stat파일 또는 status 파일을 그냥 읽는거죠..
참고로 솔라리스는 psinfo라는 구조체에 할당합니다.
/proc 디렉토리의 내용을 긁어오는게 아닐까요?
/proc 디렉토리의 내용을 긁어오는게 아닐까요?
_____________________________
언제나 맑고픈 샘이가...
http://purewell.biz
님 말씀이 맞는거 같은데..근데 process table은 pro
님 말씀이 맞는거 같은데..
근데 process table은 proc안에 없나요??
있으면 써먹을데가 있을거 같은데.. :) 궁금하군요..
평온하다~
폴더이름이 pid죠..
폴더이름이 pid죠..
strace ps
strace ps 해보세요..
/proc 폴더를 뒤지는것이 보입니다.
strace나, ltrace를 쓰면 프로그램이 어떤 식으로
동작하는지 파악하는데 도움이 됩니다.
http://bbs.kldp.org/viewtopic.php?t=1045
울랄라~ 호기심 천국~!!
http://www.ezdoum.com
간략히..
유닉스는 공통적으로 /dev/mem, /dev/kmem을 통해 주 메모리 이미지를 떠놓습니다.
원천적으로는 이 파일을 읽어서 프로세스 정보 및 커널 통계정보들을 가져오는데
복잡하죠. byte array를 뒤져야 하니까요.
제가 많이 싫어하는 aix4.x 에서는 프로세스 정보를 가져오기 위해서는 mem 파일을 뒤집니다.
솔라리스와 리눅스에서는 이 불편을 해소하고자, proc라는 인터페이스를 만든거죠
사용은 간단합니다.
proc/pid 번호/stat파일 또는 status 파일을 그냥 읽는거죠..
참고로 솔라리스는 psinfo라는 구조체에 할당합니다.
브이 V
[code:1] dir = opendir("/pro
dir = opendir("/proc"); if (!dir) error_msg_and_die("Can't open /proc"); printf("%5s %-7s %-8s %6s %5s %s\n", "PID", "TTY", "Uid", "Size", "State", "Command"); while ((entry = readdir(dir)) != NULL) { if (!isdigit(*entry->d_name)) continue; sprintf(path, "/proc/%s/status", entry->d_name); if ((file2str(path, sbuf, sizeof sbuf)) != -1) { parse_proc_status(sbuf, &p); } sprintf(path, "/proc/%s/stat", entry->d_name); if ((file2str(path, sbuf, sizeof sbuf)) != -1) { parse_proc_stat(sbuf, &p); } /* Make some adjustments as needed */ my_getpwuid(uidName, p.ruid); if (*uidName == '\0') sprintf(uidName, "%d", p.ruid); sprintf(path, "/proc/%s/cmdline", entry->d_name); file = fopen(path, "r"); if (file == NULL) continue; i = 0; len = printf("%5d %-7s %-8s %6d %c ", p.pid, p.ttyname, uidName, p.vmsize, p.state); while (((c = getc(file)) != EOF) && (i < (terminal_width-len))) { i++; if (c == '\0') c = ' '; putc(c, stdout); } fclose(file); if (i == 0) printf("[%s]", p.cmd); putchar('\n'); } closedir(dir);snipped out from busybox.
댓글 달기