4

我如何在 ruby​​ 线程中杀死 ping (或其他非常长而没有超时等系统进程)(ping - 这只是一个简单的例子):

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
......

所以我需要用 Thread 停止 ping 进程,但我不知道该怎么做。

4

1 回答 1

5

system不给你pid

改为使用Process::spawn。并使用Process::kill返回的 pid 杀死进程Process::spawn

例如:

pid = Process.spawn('ping localhost')
sleep 3
Process.kill(:TERM, pid)
Process.wait(pid)
于 2013-10-07T09:28:51.370 回答