我该如何轻轻地杀死ActiveState Perl中的一个进程?
问题描述:
我是否需要使用特定的退出码?我该如何轻轻地杀死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配置文件的问题。
答
Short 除了Window的taskkill
以外的其他常用方法都很有用。感谢mob和melpomene。
的Win32::Process
文档没有说什么方法Kill
或KillProcess
做,但他们似乎很生硬了。 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
,我相信只会告诉处理向系统报告什么作为退出。
答
据我所知,在Perl中,你可以只是做
kill -15 (pid)
在Perl谁轻轻地杀死一个过程
如果是窗口的应用程序(而不是一个控制台应用程序),您可以发送一个戒烟消息到其消息队列 – ikegami