1

我在 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,但没有成功。我要做的就是在信号处理程序中执行代码。

我为 win32找到了一个叫做 INT2 信号的东西。

提前致谢。

4

1 回答 1

2

Windows 确实允许您仅在同一线程中使用信号。所以发信号给不同的进程是行不通的。

除了信号,您还可以使用其他进程间通信方法,如套接字、管道或文件。

perlwin32

信号处理可能不像在 Unix 平台上那样表现(它也不完全“表现”:)。例如,从信号处理程序调用 die() 或 exit() 将导致异常,因为 Windows 上的大多数 signal() 实现都严重受损。因此,信号可能仅适用于简单的事情,例如在处理程序中设置标志变量。在这个端口下使用信号目前应该被认为是不支持的。

于 2012-07-11T08:42:03.983 回答