我瀏覽並閱讀了一些其他有關在一段時間後命令停止運行的問題,但是我嘗試的所有操作都無效。無法使系統命令在perl腳本中超時
該命令將在指定的時間量後停止運行(它會在短暫的時間內返回終端提示符),但只會繼續運行並不會停止。
這裏是我的代碼:
#!/usr/bin/perl
use strict;
use warnings;
use Try::Tiny;
try {
local $SIG{ALRM} = sub { die "alarm\n" };
alarm 5;
system("ping 192.168.1.1");
alarm 0;
}
catch {
die $_ unless $_ eq "alarm\n";
print "timed out\n";
};
exit;
在終端的輸出是這樣的:
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=1.98 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=3.13 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=3.20 ms
64 bytes from 192.168.1.1: icmp_seq=4 ttl=64 time=3.17 ms
64 bytes from 192.168.1.1: icmp_seq=5 ttl=64 time=3.16 ms
64 bytes from 192.168.1.1: icmp_seq=6 ttl=64 time=3.11 ms
64 bytes from 192.168.1.1: icmp_seq=7 ttl=64 time=3.18 ms
64 bytes from 192.168.1.1: icmp_seq=8 ttl=64 time=3.20 ms
64 bytes from 192.168.1.1: icmp_seq=9 ttl=64 time=3.22 ms
64 bytes from 192.168.1.1: icmp_seq=10 ttl=64 time=3.20 ms
[email protected]:~/perlstuff$ 64 bytes from 192.168.1.1: icmp_seq=11 ttl=64 time=3.06 ms
64 bytes from 192.168.1.1: icmp_seq=12 ttl=64 time=3.19 ms
64 bytes from 192.168.1.1: icmp_seq=13 ttl=64 time=3.21 ms
64 bytes from 192.168.1.1: icmp_seq=14 ttl=64 time=3.21 ms
注意它是如何試圖阻止,但不能。
您是否已在'catch'塊中打印'$ _'? – simbabque
它在Windows上爲我打印'超時\ n',但隨後繼續執行。有趣。 – simbabque
是的,它只是在提示符上打印「警報」一秒鐘,然後繼續。 –