我正在使用Windows(草莓perl)中的一些长时间运行的perl脚本.
我的理解是,信号处理在win32上的perl中不起作用,并且不应该依赖它.还有其他方法可以处理信号吗?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);
Run Code Online (Sandbox Code Playgroud)
我能想到的唯一另一件事是在两个进程之间打开一个套接字并在套接字上写消息.但必须有一些更容易的事情.有人知道任何可以做到这一点的模块吗?
更新
我已经开始创造一个"工作信号通过"机制IO::Socket::INET,并IO::Select通过打开一个插座.这似乎工作,我正在考虑编写一个与AnyEvent兼容的模块.但我仍然对不需要打开侦听端口且不需要服务器/客户端关系的实现感兴趣.是否可以通过在Windows中订阅和触发自定义事件来实现此目的?
是否有任何技术原因通过编辑器"优化导入"?Eclipse,Intellij IDEA和NetBeans都有优化导入的方法.我想知道是否有其他原因而不是一致性.还有,有更优化的导入方式吗?我已经看到了个人和组织用于优化进口的不同标准.例如...
import java.util.Map;
import java.util.List;
import com.company.MyClassThatUsesMap;
Run Code Online (Sandbox Code Playgroud)
如果我理解正确的,在上面的例子中的类加载器将加载Map与List前类MyClassThatUsesMap.这会增加代码运行速度的任何好处,而不是下面的示例吗?
import com.company.MyClassThatUsesMap;
import java.util.List;
import java.util.Map;
Run Code Online (Sandbox Code Playgroud)
这甚至是重要的还是编译器完全修复了它?