fac*_*ool 4 ruby multithreading
我如何在ruby Thread中杀死ping(或其他非常非常长的没有超时等系统进程)(ping - 这只是一个简单的例子):
a = Thread.new do
system 'ping localhost'
end
a.kill
a.exit
a.terminate
while true
sleep 5
p a.alive?
end
Run Code Online (Sandbox Code Playgroud)
输出:=>
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
......
Run Code Online (Sandbox Code Playgroud)
所以我需要用Thread停止ping进程,但我不知道该怎么做.
system不给你pid.
请Process::spawn改用.并使用Process::kill返回的pid来杀死进程Process::spawn.
例如:
pid = Process.spawn('ping localhost')
sleep 3
Process.kill(:TERM, pid)
Process.wait(pid)
Run Code Online (Sandbox Code Playgroud)