在Win32Console应用程序中处理来自'kill -3'或taskkill的信号

时间:2013-11-06 18:33:03

标签: perl console-application

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

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

  • 我在perl程序或Win32控制台应用程序中更改了什么,以便它可以知道何时终止它?

谢谢!

1 个答案:

答案 0 :(得分:1)

如果您习惯使用Unix,Windows中的信号处理有点古怪。我对此进行了大量调查,并写了我的调查结果here(从第261行开始)。

简答:Windows进程可以设置$SIG{INT}$SIG{QUIT}$SIG{BREAK}。忽略所有其他信号处理程序。通过内置kill

向您发出单独的应用信号
kill 'INT', $the_win32_logger_pid;
kill 'QUIT', $the_win32_logger_pid;
kill 'BREAK', $the_win32_logger_pid;