ruby-【RUBY】Win32下,Process.kill("INT",pid)报错

问题描述

【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

ruby-【RUBY】Win32下,Process.kill(&amp;quot;INT&amp;quot;,pid)报错的相关文章

linux下php添加mysqli拓展库时,编译报错

问题描述 linux下php添加mysqli拓展库时,编译报错 php和mysql都是已经编译安装好了,现在想要给php添加mysqli 拓展库,结果在make的时候报错 cd /usr/local/src/php-5.6.19/ext/mysqli /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config --with-mysqli=/usr/local/mysql/bin/mys

在树莓派(Raspbian系统)下安装open,编译时,cap_ffmpeg.cpp报错不通过

问题描述 在树莓派(Raspbian系统)下安装open,编译时,cap_ffmpeg.cpp报错不通过 如题,已经两天了!在试了opencv2.4.9,2.4.10,2.3.1三个版本,在make时都是在 同一个地方报错,下贴上报错的内容 modules/highgui/CMakeFiles/opencv_highgui.dir/build.make:215: recipe for target 'modules/highgui/CMakeFiles/opencv_highgui.dir/sr

在ubuntu 下运行一个java webapp项目,tomcat6控制台报错

问题描述 报错信息如下:java.io.IOException: Cannot run program "ipconfig": java.io.IOException: error=2, No such file or directoryat java.lang.ProcessBuilder.start(ProcessBuilder.java:460)at java.lang.Runtime.exec(Runtime.java:593)at java.lang.Runtime.exec

字符串&amp;amp;quot;int&amp;amp;quot;转换

问题描述 stringstr_type="int";str_typeobject_NewValue;这里"int"也可能是其他类型怎么实现? 解决方案 解决方案二:不是很明白你的意思解决方案三:不明白学习下解决方案四:stringstr_type=(string)"int";解决方案五:呃...解决方案六:Typet=Type.gettype("int");解决方案七:你是说吧字符串转化成关键字对吗?这个有点困难等待一下高手解

c-error: syntax error before &amp;amp;quot;int&amp;amp;quot;

问题描述 error: syntax error before "int" #include main() { float x,y,z,m,n; scanf("%f,%f,%f",&x,&y,&z); n=(x+z)/9; if(int(n)==n) { m=((x+z)/9+y)/2; if(int(m)==m) { printf("%g,%gn",m-n,7*n-z); printf("1n");

workbook.CreateSheet(&amp;amp;quot;my Sheet&amp;amp;quot;);和sheet.CreateRow(0);报错应该怎么改?

问题描述 singSystem;usingSystem.Collections.Generic;usingSystem.Data;usingSystem.IO;usingSystem.Linq;usingSystem.Web;usingNPOI;usingNPOI.HPSF;usingNPOI.HSSF;usingNPOI.HSSF.UserModel;usingNPOI.POIFS;usingNPOI.Util;publicclassDataTableRenderToExcel{publics

编程c语言-c语言指针问题 char *p=&amp;amp;quot;abcdefg&amp;amp;quot;+1; 为什么会报错,const char*无法转换为char*

问题描述 c语言指针问题 char *p="abcdefg"+1: 为什么会报错,const char*无法转换为char* char p="abcdefg"+1: 为什么会报错,const char无法转换为char* 解决方案 abcdefg是const 不能直接加一 解决方案二: 我想我知道了,字符串是const的对象所以指向他的指针也必须用const修饰,但这样又有个问题了char* p="ddd":为什么就可以呢?"ddd&q

请问下如下是怎么回事?网页出现taglib报错

问题描述 SeverityandDescriptionPathResourceLocationCreationTimeIdThecontentofelementtype"tag"mustmatch"(name,tagclass,teiclass?,bodycontent?,info?,attribute*)".mt/WEB-INFmytaglib.tldline141299978953150730 解决方案 解决方案二:看看标签库是否导入解决方案三:大哥你是不是直接

java中 System.out.print(&amp;amp;quot;int :&amp;amp;quot;+a)中a是以什么格式输出的

问题描述 publicclassTest{publicstaticvoidmain(Stringargs[]){inti1,i2,i3;floatf;charc;System.out.println("int:"+i1);//3c='A';f=3.0F;}}这是一个改错题,其他地方我改了但在//3的地方我找不出,我觉得是输出类型出错,题目要求输出int,在输出时i1是不是成了字符串类型. 解决方案 解决方案二:除了i1没有初始化,其它也没错解决方案三:i1是以字符串输出的.解决方案四: