2012-02-20 62 views
-5

如何在perl超时后启动并结束进程? 我需要脚本在Windows和Unix上工作,我最好的选择是什么?使用超时打开和关闭perl进程跨平台

编辑:我如何才能对Windows和Unix的启动进程的进程ID,我如何在超时

+0

也许你应该更具体。你究竟在做什么以及你在理解问题或实现你所需要的问题方面存在哪些问题? – 2012-02-20 21:48:43

+0

在我看来,用户只是试图阻止他们的代码运行时间过长。 – GoldenNewby 2012-02-20 21:49:41

+1

从[官方Perl常见问题解答](http://faq.perl.org):[如何超时缓慢事件?](http://learn.perl.org/faq/perlfaq8.html#How-do -I-timeout-a-slow-event-) – daxim 2012-02-20 22:15:54

回答

1

杀了它,您可以使用操作系统信号的ALRM(报警),您可以在几秒钟后退出您的进程。

因此,举例来说,如果你的脚本的顶部你把:

alarm 300; 

这将导致你的进程收到一个ALRM信号。这会立即杀死你的进程,或者你可以在进程死亡之前将其捕获并清理你的进程。

对于进一步阅读:http://perldoc.perl.org/functions/alarm.html

您可以捕获信号是这样的:

$SIG{ALRM} = sub { 

# Clean up process here and exit 

}; 

在回答您的编辑“编辑:我如何才能在启动进程的进程ID在Windows和UNIX和我怎么杀死它在

的进程ID存储在Perl作为$$超时”,所以:

print 'My process ID is:', $$, "\n"; 
+0

请注意,Windows上有“警报”限制:您不能中断您的脚本(请参阅[perlport](http://perldoc.perl.org/perlport.html#Alphabetical-Listing-of-Perl-Functions) )如果在系统调用(即等待一个套接字或类似的东西)。 – Ouki 2012-02-20 22:03:33

+0

我的背景更多的是在Linux中,但是在那种情况下,这个过程是不是僵尸进程(即:不能用传统方法实现)? – GoldenNewby 2012-02-20 22:05:17

+0

-1对于[严重的可移植性问题](http://stackoverflow.com/a/5893924/46395) – daxim 2012-02-20 22:13:45