如何在Windows中终止进程树

Die*_*rdk 9 perl winapi kill process

嗨我有这个进程树:

在此输入图像描述

上面的屏幕截图显示了一个进程树.在我的Perl脚本中,我知道dscli的PID.我编写了以下代码来杀死单个PID:

use Win32::Process;
use strict;
use warnings;

if(defined($ARGV[0])){
    my $pid = "$ARGV[0]";
    my $exitcode = 0;
    Win32::Process::KillProcess($pid, $exitcode);
}else{
    print "No argument provided :(\n";
}
Run Code Online (Sandbox Code Playgroud)

问题是在我的脚本中我不知道java进程的PID.我必须得到dscli的子PID,这是java进程.如果我使用上面的代码杀死dscli的PID,那么子(java)不会死掉它.

所以我的问题是,如何使用perl杀死dscli的子进程java进程?

mob*_*mob 8

您可以使用Windows命令TASKKILL /T终止进程及其子进程.

$pid = ...;
system("TASKKILL /F /T /PID $pid");
Run Code Online (Sandbox Code Playgroud)


kol*_*kol 3

可以使用PERL 中的 WMI。WMI 能够找到给定父进程的所有子进程的 PID。注意查询"select * from win32_process where ParentProcessId={0}"。如果您有子 PID 列表,您可以调用Win32::Process::KillProcess.