2016-06-10 47 views
4

我是否需要使用特定的退出码?我该如何轻轻地杀死ActiveState Perl中的一个进程?

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配置文件的问题。

+1

如果是窗口的应用程序(而不是一个控制台应用程序),您可以发送一个戒烟消息到其消息队列 – ikegami

回答

5

Short  除了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()不返回真实身份识别码,请参阅下面的其他方式连接的方法。

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


Perl的kill在Windows上显然很有力。从perlport

... kill($sig, $pid)终止由$pid标识的进程,并使其与退出状态$sig立即退出。

感谢melpomene的评论和文件链接。

exitcode,我相信只会告诉处理向系统报告什么作为退出。

+0

taskkill的'/ F'标志表示“不要温和” – mob

+0

@mob啊,谢谢!纠正。我应该知道 - F很可能代表'武力'。 – zdim

+0

Windows没有信号。在Windows上,['kill $ n,$ pid'强制进程'$ pid'以状态'$ n'](http://perldoc.perl.org/perlport.html#kill)退出。 – melpomene

0

据我所知,在Perl中,你可以只是做

kill -15 (pid) 

在Perl谁轻轻地杀死一个过程