2013-10-07 3 views
4

나는 핑 (또는 다른 아주 제한 등 시스템 프로세스없이 최장) 죽일 수있는 방법 - 루비 스레드에서 (핑은 그냥 간단한 예제) :킬 시스템 프로세스

a = Thread.new do 
    system 'ping localhost' 
end 

a.kill 
a.exit 
a.terminate 

while true 
    sleep 5 
    p a.alive? 
end 

출력 : =>

PING localhost.localdomain (127.0.0.1) 56(84) bytes of data. 
64 bytes from localhost.localdomain (127.0.0.1): icmp_req=1 ttl=64 time=0.023 ms 
.... 
true 
64 bytes from localhost.localdomain (127.0.0.1): icmp_req=7 ttl=64 time=0.022 ms 
..... 
true 
...... 

그래서 스레드와 핑 프로세스를 중지해야하지만 어떻게 해야할지 모르겠다.

+0

당신은 GEM [하나님] (http://godrb.com/) –

답변

5

system은 (는) pid을주지 않습니다.

대신 Process::spawn을 사용하십시오. 그리고 Process::kill을 사용하여 Process::spawn에 의해 반환 된 PID를 사용하여 프로세스를 종료하십시오. 예를 들어

:

pid = Process.spawn('ping localhost') 
sleep 3 
Process.kill(:TERM, pid) 
Process.wait(pid) 
+0

덕분에, 그것은 – facetostool

+0

@facetostool, 천만에요 도움으로 좀 걸릴 수 있습니다. – falsetru