Perl 来自'的手柄信号;杀戮-3';或Win32 Console应用程序中的taskkill

Perl 来自'的手柄信号;杀戮-3';或Win32 Console应用程序中的taskkill,perl,console-application,Perl,Console Application,我有一个Win32 console应用程序(作为Win32 console项目从Visual Studio构建),它执行一些日志文件(.txt)处理。我有一个单独的perl程序(遗留程序),现在需要启动这个Win32控制台应用程序,然后在完成后停止 Perl程序使用Win32::Process API启动Win32 console应用程序的实例。当通过“kill-xpid”或Win32:Process:kill完成时,它可以杀死控制台应用程序。问题是控制台应用程序需要知道其是否被终止/终止,以便

我有一个Win32 console应用程序(作为Win32 console项目从Visual Studio构建),它执行一些日志文件(.txt)处理。我有一个单独的perl程序(遗留程序),现在需要启动这个Win32控制台应用程序,然后在完成后停止

Perl程序使用Win32::Process API启动Win32 console应用程序的实例。当通过“kill-xpid”或Win32:Process:kill完成时,它可以杀死控制台应用程序。问题是控制台应用程序需要知道其是否被终止/终止,以便刷新日志处理。console应用程序已经通过SetConsoletrlHandler API注册了一个处理程序,但是当通过kill-2/3 pid从perl程序中终止时,不会被调用

  • 我应该在perl程序或Win32 console应用程序中更改什么,以便它可以知道何时终止

谢谢

如果您习惯于Unix,Windows中的信号处理有点奇怪。我对此做了大量的调查,并写下了我的发现(从261行开始)

简短回答:Windows进程可以设置
$SIG{INT}
$SIG{QUIT}
,或
$SIG{BREAK}
。忽略所有其他信号处理程序。通过内置的单独应用程序向他们发送信号:


谢谢大家。我需要在Win32控制台应用程序中执行哪些操作,以便它接收此信号?或者仅仅从SetConsoletrlHandler中设置一个处理程序就足够了?我没有太多的成功只是杀死'退出'pid?控制台应用程序似乎没有收到信号:(我的印象是控制台应用程序是一个Perl程序;然后您可以在控制台应用程序中设置
$SIG{QUIT}
,然后优雅地退出。但可能我错了?Perl程序是一个遗留软件,它反过来启动和停止win32控制台应用程序。控制台应用程序(与日志混在一起的那个)是一个Visual Studio构建的项目,名为“Win32 console应用程序”。很抱歉,我的深度不够。我的答案适用于Windows上的一个Perl程序,表示Windows上的另一个Perl程序。好的,谢谢您的尝试。我已经澄清了上面的问题,表明console应用程序是Visual Studio构建的。
kill 'INT', $the_win32_logger_pid;
kill 'QUIT', $the_win32_logger_pid;
kill 'BREAK', $the_win32_logger_pid;