如何代表Perl中的进程在Win32中完成该过程?

时间:2010-09-22 12:20:31

标签: windows perl winapi kill taskmanager

例如,要有rschit进程excell.exe意味着Perl。

2 个答案:

答案 0 :(得分:1)

您是否尝试将系统调用发送到“taskkill / IM excel.exe”?

答案 1 :(得分:1)

如果这是关于自动化后“服务器模式”中剩余的过程,您只需在应用程序对象上调用quit方法即可。我在How can I run a macro in an Excel file I open with Perl?处通过回答进行了编辑以包含该内容。 (你知道,我想如果我告诉你这是一个Application对象,你可以阅读MS documentation on that object来弄清楚你想做什么。)


但是,您可以使用taskkill.exe在Windows中终止进程。您可以通过在命令行上键入taskkill /?来进行阅读。它将处理taskkill /IM excel.exe

但是如果你想要一个特定的PID,你需要使用tasklist.exe。 (在命令提示符下键入tasklist以查看输出。或tasklist /?以获取更多信息。)

以下代码同时使用:

use strict;
use warnings;
use English qw<$OS_ERROR>;
use File::Spec;

my $sys32dir = File::Spec->catfile( $ENV{SYSTEMROOT}, 'System32' );
my $tasklist_exe = File::Spec->catfile( $sys32dir, 'tasklist.exe' );
my ( $excel_line ) = grep { /^excel.exe\b/i } `$tasklist_exe`;
# $excel_line: 'EXCEL.EXE  4468 Console  1  20,968 K

# The PID is the second column
my ( undef, $pid ) = split qr{\s+}, $excel_line;

if ( my $rc = system( File::Spec->catfile( $sys32dir, 'taskkill.exe' )
   , '/PID', $pid 
   )) {
    die ( $OS_ERROR + 0 ) . ' - ' . $OS_ERROR;
}