【发布时间】:2014-04-05 15:05:30
【问题描述】:
我正在处理的 Windows(草莓 perl)中有几个长时间运行的 perl 脚本。
- 第一个进程是父监控进程。它每 24 小时重新启动一次子进程,并将始终运行。
- 第二个是子支付处理脚本。此过程必须在关闭之前完成它正在执行的所有操作。
据我了解,win32 上 perl 中的信号处理 doesn't work 不应依赖它。还有其他方法可以处理信号吗? Win32::Process::Kill 似乎在没有让它安全关闭的情况下杀死了进程。
这是我尝试过的信号处理...
#Child
my $interrupted = 0;
$SIG{INT} = sub{$interrupted = 1;};
while(!$interrupted){
#keep doing your thing, man
}
#Parent
my $pid = open2(\*CHLD_OUT,\*CHLD_IN,'C:\\strawberry\\perl\\bin\\perl.exe','process.pl');
kill INT=>$pid;
waitpid($pid,0);
我能想到的唯一另一件事是在两个进程之间打开一个套接字并通过套接字写入消息。但一定有更容易的事情。任何人都知道可以做到这一点的任何模块吗?
更新
我已经开始通过IO::Socket::INET 和IO::Select 通过opening a socket 创建“信号”机制。这似乎可行,我正在考虑编写一个与AnyEvent 兼容的模块。但是我仍然对不需要打开侦听端口并且不需要服务器/客户端关系的实现感兴趣。是否可以通过在 Windows 中订阅和触发自定义事件来做到这一点?
【问题讨论】: