2012-05-14 4 views
5

Ruby에서 PID를 기반으로 프로세스의 하위 프로세스 상태를 가져 오는 방법이 있습니까?Ruby에서 PID로 프로세스 상태 가져 오기

예를 들어, 파이썬에서 당신은 psutil.Process (PID)를 할 내가 실행중인 프로세스의 프로세스 상태를 얻을 수있는 휴대용 루비 방법을 모르는

+2

프로세스 모듈에 필요한 모듈이 있다고 생각합니다. http://www.ruby-doc.org/core-1.9.3/Process.html – vlasits

+0

작업에 필요한 OS는 무엇입니까? – Phrogz

+1

@vlasits 프로세스 모듈에는 실행중인 프로세스의 상태, 종료 된 프로세스의 상태 만 가져 오는 메소드가 없습니다. – dbenhur

답변

2

을 .STATUS 수 있습니다. Process.wait을 수행하고 $?.exitstatus을 점검 할 수 있지만 원하는 것은 아닙니다. 다음 실행

outputstring="ps -O=S -p #{mypid}" 

: POSIX의 솔루션의 경우, 문자 코드 추신 프로세스의 상태에 대한 문자열을

OS X에
PROCESS STATE CODES 
Here are the different values that the s, stat and state output specifiers 
(header "STAT" or "S") will display to describe the state of a process. 
D Uninterruptible sleep (usually IO) 
R Running or runnable (on run queue) 
S Interruptible sleep (waiting for an event to complete) 
T Stopped, either by a job control signal or because it is being traced. 
W paging (not valid since the 2.6.xx kernel) 
X dead (should never be seen) 
Z Defunct ("zombie") process, terminated but not reaped by its parent. 
0

, 내가 설정을 생산 얻을

`ps -o=state= -p #{pid}`.chomp 

를 사용할 수 있습니다 % x 전화 번호 :

termoutput=%x[#{outputstring}] 

필요한 경우 표시하거나 출력물을 깨끗하게 유지하고 통화 상태에서 작동 할 수 있습니다.

2

나는 똑같은 것을 찾고 있었다. ProcessStatus가 라이브 PID에서 초기화 할 수없는 것처럼 보이는 것은 수치 스럽습니다. 자녀 과정을 안전하게 시간에 맞춰 죽이는 것과 같은 일을하고 싶다면이 일은 매우 중요합니다. 당신이 리눅스에 있다면 어떤 경우

, 는 /proc/$pid/status에서 두 번째 라인은 대부분의 경우 status_line = File.open("/proc/#{pid}/status") {|f| f.gets; f.gets }

: 훨씬 더 빨리 외부 프로그램을 포함하는 것보다는이다.

+0

외부 프로그램 (및 포격)에 의존하지 않는 간단하고 우아한 솔루션입니다. 감사합니다. – Navarro