【问题标题】:How to catch Fatal IO error 11 (Resource temporarily unavailable)如何捕获致命 IO 错误 11(资源暂时不可用)
【发布时间】:2016-11-08 19:55:00
【问题描述】:

关于程序崩溃有很多类似的问题,但我没有看到任何与我所问的完全一样的问题......

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

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

【问题讨论】:

    标签: perl x11 gtk3


    【解决方案1】:

    我认为foo.pl 涉及某种 GUI。

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

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

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

    我认为我们会更详细地对此发表评论。

    【讨论】:

    • 添加了连接多个信号的示例代码,但没有一个能捕捉到这个事件......也许我只是没有连接正确的一个,或者可能有不同的方法。
    • @TheAmigo 我明白了——谢谢。是的,这些事件都不是为了服务器关闭连接......我在看文档,不记得了
    • @TheAmigo 信号/事件需要处于相当高的水平(我不确定窗口本身是否有机会)。例如,我查看了Glib exceptions(但这只是一个猜测)。总而言之,我现在是空的,以后可以多看。
    • 感谢您的检查...我一直在寻找更多的方向,但还没有发现任何有用或有希望的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    相关资源
    最近更新 更多