问题描述
- 【RUBY】Win32下,Process.kill("INT",pid)报错
-
正在学习Ruby,使用的是1.9.3版本的,在win7 32位系统下=。=首先,我用WEBrick起了一个WEB服务器,如下。
server = WEBrick::HTTPServer.new(:Port =>1235) trap("INT"){server.shutdown} server.start
然后获得了一个pid=16452。
由于直接在IDE里运行的,我不能用CTRL+C来发送INT信号,所以我想我应该可以用Process.kill来发送一个信号给他。
然后我就这样:
Process.kill("INT",16452)
然后RUN,得到了报错信息:
Bad file descriptor (Errno::EBADF)但如果是
Process.kill("KILL",16452)
这样的话,就不会报错而是直接杀掉进程了。
试用了@caozhy说的开线程,发现不行,信号没有被捕捉到,没有进入trap:
trap("ABRT") do f = File.new("trapLog.txt","w") f.puts Time.new f.close end Thread.new do sleep(10) Process.kill('ABRT', Process.pid) end i=0 while i<100 puts i sleep(1) i+=1 end
但如果这样写,就可以进入到trap里面。
Signal.trap("ABRT") do f = File.new("trapLog.txt","w") f.puts Time.new f.close end Process.kill("ABRT",Process.pid)
似乎是拒绝本线程以外的任何信号?有人懂的能否讲解一下吗?
非常感谢
解决方案
进程不处理你的INT信号。KILL是强制结束
解决方案二:
进程不处理你的INT信号。KILL是强制结束
解决方案三:
需要看WEBrick是否处理
解决方案四:
开一个线程来做,参考:
http://stackoverflow.com/questions/23223673/kill-a-process-using-its-pid-in-ruby
时间: 2024-10-20 07:15:32