2012-07-11 49 views
1

我在windows上使用perl v14。我有2个简单文件:发信号给perl进程从一个独立的perl进程触发代码处理器

$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

在此先感谢。

回答

2

Windows确实允许您仅在同一线程中使用信号。因此,指示不同的过程将不起作用。

而不是信号,你可以使用其他方式的进程间通信,如套接字,管道或文件。

perlwin32

信号处理可能不表现为Unix平台(其中不 正是 “做人”,要么:)。例如,从信号处理程序中调用die()或退出() 将导致异常,因为Windows上signal()的大多数实现都严重受损。因此, 信号可能只适用于简单的事情,例如在处理程序中设置标志变量 。在此端口下使用信号应该当前为 认为不受支持。