2016-11-08 107 views
0

大约有崩溃的程序很多类似的问题,但我看不出有什么很喜欢这么问我...如何捕捉致命IO错误11(资源暂时不可用)

当我使用xkill来杀了我的申请,我得到标准错误以下消息:

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

我想要做什么(如果可能)是赶上该事件,并做一些清理(保存首选项等)在退出之前。

设置:

  • 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时,不执行打印语句。

回答

1

我认为foo.pl涉及各种图形用户界面。

至于xkill,从它的手册页我的系统

Xkill上是迫使X服务器关闭到客户端的连接的工具。这个程序是非常危险的,[...]

换句话说,它“从应用程序下拉出地毯”,关闭它的连接。在发生这种情况时,您可以查看它收到的各种事件,这取决于它是如何写入的。然后你可以为它设置一个回调。

我想我们会更详细地评论一下。

+0

添加了连接多个信号的示例代码,其中没有一个捕获此事件......也许我只是没有连接正确的一个,或者可能有不同的方法。 – TheAmigo

+0

@TheAmigo我看到了 - 谢谢。是的,这些事件都不是服务器关闭连接......我在看文档,不记得 – zdim

+0

@TheAmigo信号/事件需要在相当高的水平(我不确定窗口本身会得到个机会)。例如,我查看了[Glib异常](http://gtk2-perl.sourceforge.net/doc/pod/Glib.html#EXCEPTIONS)(但这只是一个猜测)。现在我总是空着,稍后可以看到它。 – zdim

相关问题