【问题标题】:signal a perl process from an independent perl process to trigger code in handler从独立的 perl 进程向 perl 进程发出信号以触发处理程序中的代码
【发布时间】:2012-07-11 07:23:33
【问题描述】:

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

提前致谢。

【问题讨论】:

    标签: perl winapi process signals


    【解决方案1】:

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

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

    来自perlwin32

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-17
      • 2011-11-18
      相关资源
      最近更新 更多