我在Windows上使用perl v14。我有2个简单的文件:
$SIG{'INT'} = sub {
print "got SIGINT\n";
#some useful code to be executed
#on reception of signal
};
$SIG{'ALRM'} = sub {
print "got SIGALRM\n";
};
print "my pid: ",$$,"\n";
while(1)
{
print "part 1\n";
sleep(3);
print "part 2\n\n";
sleep(3);
}
上面的文件开始并等待已经给它的pid杀死。 第二个文件使用其pid(手动设置)直接杀死第一个perl进程。
$pid = xxxx; #this is the manually entered pid for I process
print "will attempt to kill process: $pid\n";
kill INT, $pid;
我运行第一个perl脚本并按Ctrl-C,处理程序按预期工作但使用第二个文件我得不到相同的结果。我也尝试过其他信号,如ALRM,HUP,TERM,FPE,但没有成功。我想要做的就是在信号处理程序中执行代码。
我找到了一种叫做INT2信号for win32的东西。
提前致谢。
答案 0 :(得分:2)
Windows确实允许您仅在同一个线程中使用信号。因此,发出不同流程的信号将不起作用。
您可以使用其他进程间通信方法(如套接字,管道或文件)来代替信号。
来自perlwin32:
信号处理可能不像在Unix平台上那样(它没有 完全“表现”,要么:)。例如,调用die()或exit() 从大多数情况来看,信号处理程序会导致异常 Windows上的signal()实现严重瘫痪。从而, 信号可能仅适用于设置标志变量等简单事物 在处理程序中。目前应使用此端口下的信号 被认为是不受支持的。