2012-02-20 47 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