从独立的perl进程发出perl进程信号,以触发处理程序中的代码

时间:2012-07-11 07:23:34

标签: perl winapi process signals

我在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的东西。

提前致谢。

1 个答案:

答案 0 :(得分:2)

Windows确实允许您仅在同一个线程中使用信号。因此,发出不同流程的信号将不起作用。

您可以使用其他进程间通信方法(如套接字,管道或文件)来代替信号。

来自perlwin32

  

信号处理可能不像在Unix平台上那样(它没有   完全“表现”,要么:)。例如,调用die()或exit()   从大多数情况来看,信号处理程序会导致异常   Windows上的signal()实现严重瘫痪。从而,   信号可能仅适用于设置标志变量等简单事物   在处理程序中。目前应使用此端口下的信号   被认为是不受支持的。