0

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

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

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

谢谢!

4

1 回答 1

1

如果您习惯了 Unix,Windows 中的信号处理会有点奇怪。我对此进行了很多调查,并在这里写下了我的发现(从第 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;
于 2013-11-06T20:05:10.563 回答