gpt4 book ai didi

windows - 在 Windows 上捕获 SIGINT(和其他信号)

转载 作者:可可西里 更新时间:2023-11-01 13:58:49 24 4
gpt4 key购买 nike

为什么使用这个简单的脚本:

#! 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";) 执行相同的操作,窗口将关闭但不会执行干净退出)

(好吧,我承认它是为 Windows 7 amd64 -vs- 上的 MSWin32-x86-multi-thread 构建的 Strawberry perl 5,版本 14,subversion 2 (v5.14.2) perl,v5.10.1 (*) 为 x86_64-linux-gnu-thread-multi 在 Debian 6.0.4 机器上构建,但我怀疑它对这些基本的东西是否重要。编辑:我刚刚用 ActiveState perl 5.12 在类似的盒子上检查了它,它是一样的,所以显然这个问题并不孤立于 Strawberry。)

我知道perlport说的很清楚,

Don't count on signals or %SIG for anything.

但必须有办法......(另外,我想明白。)

那么应该采取哪些不同的做法呢?

最佳答案

您可以使用 sigtrap用法:

use sigtrap 'handler', \&cleanup, 'normal-signals';

当捕获到信号并将信号标识作为参数传递时,这将调用方法 cleanup

关于windows - 在 Windows 上捕获 SIGINT(和其他信号),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10912113/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com