为什么这个简单的脚本:
#! perl -w
use strict;
use warnings;
$| = 1;
my $LOCKFILE = "$0.lock";
sub mklock {
open my $lf, ">", $LOCKFILE;
print $lf $$;
close $lf;
}
sub rmlock { unlink $LOCKFILE; }
sub clean_exit { rmlock; exit 0; }
sub work {
print "working...";
sleep 10;
# although `sleep 1 foreach (1..10);`
# *does* interrupt---between `sleep`s--see my answer
print "done.\n"
}
$SIG{INT} = "clean_exit";
mklock;
work;
rmlock;
适用于Debian但不适用于Windows?
- 在 Windows 上,此脚本运行时会忽略Ctrl+C
- 在 Debian 上,按预期执行干净退出
- ,
$SIG{INT} = \&clean_exit;
行为似乎相同 - (如果我对
SIGHUP
($SIG{HUP} = "clean_exit";
) 做同样的事情,窗口会关闭但不会执行干净退出)
(好吧,我承认它是perl 5, version 14, subversion 2 (v5.14.2) built for MSWin32-x86-multi-thread
Windows 7 amd64 -vs-perl, v5.10.1 (*) built for x86_64-linux-gnu-thread-multi
在 Debian 6.0.4 盒子上的草莓,但我怀疑它对这些基本的东西很重要。编辑:我刚刚用 ActiveState perl 5.12 在类似的盒子上检查过它,它是一样的,所以显然这个问题并不局限于草莓。)
我知道perlport说得很清楚,
不要指望信号或 %SIG 做任何事情。
但必须有办法......(另外,我想了解。)
那么应该做些什么不同的事情呢?