如何捕获致命IO错误11(资源暂时不可用)

时间:2016-11-08 19:55:00

标签: perl x11 gtk3

关于程序崩溃有很多类似的问题,但我没有看到任何类似于我所要求的......

当我使用xkill来终止我的应用程序时,我在stderr上收到以下消息:

(foo.pl:32471): Gdk-WARNING **: foo.pl: Fatal IO error 11 (Resource temporarily unavailable) on X server :0.0.

我想做的事情(如果可能的话)是捕获该事件并在退出之前进行一些清理(保存prefs等)。

设定:

  • 的Linux
  • Perl 5.16
  • Gtk3 3.8.8

修改

示例源代码:

#!/usr/bin/perl -w
use Gtk3 -init;
my $win = Gtk3::Window->new;
$win->signal_connect('delete-event' => sub { cleanup('delete-event') } );
$win->signal_connect('destroy' => sub { cleanup('destroy') } );
$win->signal_connect('destroy-event' => sub { cleanup('destroy-event') } );
$win->signal_connect('unmap-event' => sub { cleanup('unmap-event') } );
$win->signal_connect('unmap' => sub { cleanup('unmap') } );
$win->show_all;
Gtk3->main;

sub cleanup {
    my $event = shift;
    print "Doing cleanup due to signal '$event'\n";
}

在此应用上使用xkill时,不会执行print语句。

1 个答案:

答案 0 :(得分:1)

我认为foo.pl涉及各种各样的GUI。

至于xkill,来自我系统的手册页

  

Xkill是一个强制X服务器关闭客户端连接的实用程序。这个程序非常危险,[...]

换句话说,它会从你的应用程序中“拉出地毯”,关闭它的连接。你可以在它内部查看它发生的各种事件,这取决于它的编写方式。然后你可以为它设置一个回调。

我认为我们会对此进行更多细节评论。