2016-11-08 40 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

相關問題