【问题标题】:Perl IPC, child to send interrupt to parentPerl IPC,子级向父级发送中断
【发布时间】:2015-08-03 17:17:37
【问题描述】:

我是 IPC 新手,谁能给我一个简单的 Perl IPC 示例,其中子可以向其父级发送信号,而父级可以捕获并做出反应。 我尝试了很多东西,但它只有在我按下 control-C 时才会做出反应,而不是像我打算的那样每 5 秒一次...

注意:它适用于 Linux,但不适用于 Windows。

use strict;
use warnings;
my $parent_pid = $$;
my $pid = fork();
if($pid == 0) {
   while (1) {
       print "In Child...\n";
       sleep 5;
       print "Sending INT to my parent...\n";
       kill 'INT', $parent_pid;
   }
}
else {
   sub catch_zap {
      my $signame = shift;
      print "Somebody sent me a SIG $signame!";
   }
   while(1){
      sleep 1;
      print "inside parent\n";
      eval {
         $SIG{INT} = \&catch_zap;
      };
   }
}

【问题讨论】:

  • 你的例子似乎对我有用。由于输出缓冲,您的情况可能没有显示Somebody sent (...) 消息?尝试在该打印语句中添加\n
  • 我添加了\n,但它仅在我按下 control-c 时打印Somebody sent me a SIG INT!,而不是每 5 秒一次。
  • 啊,它在 Linux(perl 5.14 版)上运行良好,但在 windows 上不行,我在 windows 上使用 perl 5.18
  • 不是 Perl 的每个方面都可以在 Windows 上工作(就像在 UNIX 上一样,或者有时根本不工作),它也可能取决于 Windows 上 Perl 的分布(例如“DWIM Perl”、“Strawberry” Perl”,“ActiveState Perl”)你也在使用。具体来说,我相信 form()、Signals 和 Pipes 以 UNIX 如何做东西为模型,在 Windows 上的 Perl 中进行了模拟。

标签: perl ipc inter-process-communicat


【解决方案1】:

Windows doesn't do signals。您可能想改用sockets

【讨论】:

  • 在这里看不到分叉的相关性;想扩展一下吗?
猜你喜欢
  • 1970-01-01
  • 2019-02-22
  • 2021-04-16
  • 1970-01-01
  • 2021-05-27
  • 1970-01-01
  • 1970-01-01
  • 2022-08-08
  • 2015-01-18
相关资源
最近更新 更多