2009-04-24 4 views
2

Perl이나 Python을 사용하여 프로세스 통계를 일반적으로 검색 할 수있는 방법이 있습니까? 우리는 리눅스를 특정하게 유지할 수 있습니다.Perl이나 Python을 사용하여 프로세스 통계를 검색하는 방법이 있습니까?

몇 가지 문제점이 있습니다. 사전에 PID를 알 수 없지만 스크립트 자체에서 해당 프로세스를 실행할 수 있습니다.

기본적으로 ./myscript.pl some/process/I/want/to/get/stats/for

, 나는, 적어도, 프로세스의 메모리 소비를 좀하고 싶습니다,하지만 자세한 내용은 내가 더 나은 얻을 수 있습니다 : 예를 들어, 나는 아무 문제 일이없는 것 (프로세스의 실행 시간, 프로세스의 평균 CPU 사용량 등)

감사합니다.

+0

A [비슷한 질문] (http://stackoverflow.com/questions/629161/how를 특정 프로세스를 검색 할 수 있습니다 perl-script-know-its-own-memory-footprint)은 몇 주 전에 [szagab] (http://stackoverflow.com/users/11827/szabgab)에 의해 질문을 받았다. – innaM

답변

7

시스템의 프로세스에 대한 많은 정보를 반환하는 Proc::ProcessTable 모듈을 살펴보십시오. "fields"메서드를 호출하여 각 프로세스에서 추출 할 수있는 세부 정보 목록을 가져옵니다.

최근 Linux 용 Perl kill 프로그램을 작성할 때 작성한 프로세스 모듈을 대체 한 위 모듈을 발견했습니다. 내 스크립트 here을 살펴볼 수 있습니다.

ps 명령어에서 추가 정보를 추출하기 위해 쉽게 확장 할 수 있습니다. 예를 들면. 'getbycmd'메소드는 명령 행 호출이 전달 된 인수와 일치하는 pid 목록을 리턴합니다. 그런 다음과 같이 그것에 PID 것을 전달하여 'getdetail'를 호출하여 세부 사항을 '

my $psTable = Process->new(); 

# Get list of process owned by 'root' 
for my $pid ($psTable->getbyuser("root")) { 

    $psDetail = $psList->getdetail($pid); 
    # Do something with the psDetail.. 

} 
2

어린이가 fork() 인 경우 PID임을 알게됩니다.

부모 프로세스 내에서 자식 프로세스가 실행중인 동안에 만 메모리와 CPU 사용량을 확인하기 위해 /proc/<PID/의 파일을 구문 분석 할 수 있습니다.

1

일반적인 오해는/proc 읽기가/home 읽기와 같습니다./proc은 하나의 open()과 동일한 정보를 제공하기 위해 설계되었습니다. 20 개의 비슷한 syscall이 어떤 구조를 채울 수 있습니다. 그것을 읽음으로써 완충 장치를 오염 시키거나 무고한 프로그램을 공중 지형으로 보내거나 그렇지 않으면 새끼 고양이의 죽음에 기여하지 않습니다.

액세스/proc 디렉토리/foo는 그냥 당신이 무엇인지에 대한 자세한 정보가 필요하면

"나는 언어 무신론자 방법으로 처리 할 수 ​​foo는에 나에게 정보를 제공"커널을 말하고에서/proc 디렉토리/{PID}/질문을 업데이트하면 게시됩니다.

+1

proc/{pid} /를 읽는 데 문제가 없습니다. 하지만 일단 자식 프로세스가 종료되면 proc/{pid} /가 사라졌습니다. 그렇죠? 내가 끝날 때까지 어떻게 거기에 있는지 확인할 수 있습니까? – FreeMemory

+1

나는/proc/pid/디렉토리에 열린 파일 핸들을 가지고 있으면 파일이 사라지지 않는다는 것을 기억하지만, 확실하지는 않다. 당신이 부모라면,/proc/pid/디렉토리는 당신이 그 아이를 데려 오지 않는 한 확실히 머무를 것입니다 (커스텀 $ SIG {CHLD}). – ephemient

관련 문제