我有一對長期運行perl腳本在windows(草莓perl),我正在工作。perl Win32 Perl之間的信號處理
- 第一個過程是父監視過程。它每24小時重新啓動一次子進程,並始終運行。
- 第二個是兒童支付處理腳本。這個過程必須完成它在關機前所做的任何事情。
這是我的理解,信號處理doesn't work perl在win32上,它不應該依靠。有其他方式可以處理信號嗎? 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);
我能想到的唯一的另一件事就是打開兩個進程之間的套接字和寫入通過套接字消息。但一定有一些更容易的事情。任何人都知道任何可以做到這一點的模塊?
更新
我已經開始工作由opening a socket創建通過IO::Socket::INET
和IO::Select
一個 「信號」 機制。這似乎工作,我正在考慮編寫一個與AnyEvent兼容的模塊。但我仍然對一個不需要打開偵聽端口並且不需要服務器/客戶端關係的實現感興趣。是否可以通過在Windows中訂閱和觸發自定義事件來完成此操作?