如何在ActiveState Perl中轻轻杀死进程?

时间:2016-06-10 21:14:14

标签: perl kill-process sigkill

我是否需要使用特定的exitcode?

Win32::Process::Create(
    $ProcessObj,
    "C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe",
    "firefox -no-remote -P $prof_name",
    0,
    NORMAL_PRIORITY_CLASS,
".")|| die ErrorReport();
$ProcessObj->kill(0);

这样就可以杀死,但不是轻微的,它会导致Firefox配置文件出现问题。

2 个答案:

答案 0 :(得分:5)

简短 Window taskkill以外的常用方法很有用。感谢mobmelpomene

Win32::Process文档没有说明方法KillKillProcess的用途,但他们似乎对此非常直率。 Windows确实提供了如何终止进程的渐变,例如参见graceful termination via winapi上的这篇文章,即使它没有UNIX的信号。但是,模块或kill显然没有使用它(见结束)。

Windows自己的taskkill应该很好地要求进程终止。通过在系统的控制台中运行taskkill /?来查询标志。以下是taskkill on MS technet的文档。例如,这会通过其$pid及其子项

来终止该过程
my $pid = $ProcessObj->GetProcessID();
system("taskkill /t /pid $pid");

如果方法GetProcessID()没有返回真实ID,请参阅以下链接了解其他方法。

我现在无法在Windows上测试。 this post中有更多相关细节,第二部分。

Perl的kill在Windows上显然是有力的。来自perlport

  

... kill($sig, $pid)终止$pid标识的流程,并立即退出退出状态$sig

感谢melpomene提供评论和文档链接。

我认为,exitcode只会告诉处理系统退出时要报告的内容。

答案 1 :(得分:0)

据我所知,在Perl你可以做到

kill -15 (pid)

谁轻轻地杀死了perl的进程