【发布时间】:2012-06-08 12:41:48
【问题描述】:
您好,我有这个进程树:
上面的截图显示了一个进程树。在我的 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";
}
问题是在我的脚本中我不知道 java 进程的 PID。我必须得到 dscli 的子 PID,它是 java 进程。如果我使用上面的代码杀死了 dscli 的 PID,那么孩子(java)不会因此而死。
所以我的问题是,如何使用 perl 杀死作为 dscli 子级的 java 进程?
【问题讨论】:
-
getppid未在 Win32 上实现,这意味着仅检查给定 PID 是否为其父进程的每个进程将不起作用:( -
perlmonks.org 有一位知识渊博的 Perl/Windows 用户
-
另外,如果你能找到如何在 C 中实现(使用 API 或 WMI),我可以帮助你将它移植到 Perl。
-
Win32::Process::Info有$pi->Subprocesses