From: Kazuhiro N. <zn...@mb...> - 2004-04-09 08:37:59
|
西山和広です。 forkしてexecしていないプロセスが残っているとwindowが 残ったままになります。 これはどうしようもないのでしょうか? execしている方は問題がないように見えますが、 5.5. GTK+ アプリで fork() すると、妙な 'x io error' が起こるのはなぜ? [GTK 2.x] http://www.gnome.gr.jp/docs/gtk+faq.20040114.html#AEN506 という問題もあるようなので、GTKを使っているプログラムからは execするとしてもforkしない方がいいのでしょうか? #!/usr/bin/ruby require 'gtk2' Gtk.init window = Gtk::Window.new window.signal_connect("destroy") do Gtk.main_quit end button_box = Gtk::VButtonBox.new window.add(button_box) fork_button = Gtk::Button.new("fork") fork_button.signal_connect("clicked") do fork do sleep 3 exit!(0) end Gtk.main_quit end button_box.pack_start(fork_button) exec_button = Gtk::Button.new("exec") exec_button.signal_connect("clicked") do fork do exec("ruby", "-e", "sleep 3") end Gtk.main_quit end button_box.pack_start(exec_button) window.show_all Gtk.main -- |ZnZ(ゼット エヌ ゼット) |西山和広(Kazuhiro NISHIYAMA) |
From: Masao M. <mu...@hi...> - 2004-04-09 14:15:08
|
むとうです。 On Fri, 09 Apr 2004 17:37:52 +0900 Kazuhiro NISHIYAMA <zn...@mb...> wrote: > 西山和広です。 > > forkしてexecしていないプロセスが残っているとwindowが > 残ったままになります。 > これはどうしようもないのでしょうか? > > execしている方は問題がないように見えますが、 > > 5.5. GTK+ アプリで fork() すると、妙な 'x io error' が起こるのはなぜ? > [GTK 2.x] > http://www.gnome.gr.jp/docs/gtk+faq.20040114.html#AEN506 > > という問題もあるようなので、GTKを使っているプログラムからは > execするとしてもforkしない方がいいのでしょうか? 実は私、この辺よくわかっていないのですが....。 私の環境では、3秒後にwindowが消えました。環境の問題でしょうか。 ruby -v ruby 1.9.0 (2004-03-27) [i686-linux] -- .:% Masao Mutoh<mu...@hi...> |
From: Kazuhiro N. <zn...@mb...> - 2004-04-09 17:16:34
|
西山和広です。 In <200...@hi...> On Fri, 9 Apr 2004 23:14:56 +0900 Masao Mutoh <mu...@hi...> wrote: > 実は私、この辺よくわかっていないのですが....。 > > 私の環境では、3秒後にwindowが消えました。環境の問題でしょうか。 その3秒後まではwindowを持っているはずの親プロセスがいなくなっていて 子プロセスの方だけの状態なのです。 http://www.gnome.gr.jp/docs/porting-apps-GNOME-2.0/ar01s19.html に書いているように http://www.gnome.gr.jp/docs/glib-2.2.x-refs/glib/glib-Spawning-Processes.html あたりの関数(GLib の g_spawn_* 関数)を使えばよさそうなのですが、 Ruby-GNOME2ではサポートしないのでしょうか? 他にも http://www.gnome.gr.jp/docs/porting-apps-GNOME-2.0/ar01s10.html に書いている g_utf8_validate() も使いたいです。 -- |ZnZ(ゼット エヌ ゼット) |西山和広(Kazuhiro NISHIYAMA) |
From: Masao M. <mu...@hi...> - 2004-04-09 17:34:45
|
むとうです。 On Sat, 10 Apr 2004 02:16:24 +0900 Kazuhiro NISHIYAMA <zn...@mb...> wrote: > 西山和広です。 > > In <200...@hi...> > On Fri, 9 Apr 2004 23:14:56 +0900 > Masao Mutoh <mu...@hi...> wrote: > > 実は私、この辺よくわかっていないのですが....。 > > > > 私の環境では、3秒後にwindowが消えました。環境の問題でしょうか。 > > その3秒後まではwindowを持っているはずの親プロセスがいなくなっていて > 子プロセスの方だけの状態なのです。 あ、なるほど。 > http://www.gnome.gr.jp/docs/porting-apps-GNOME-2.0/ar01s19.html > に書いているように > http://www.gnome.gr.jp/docs/glib-2.2.x-refs/glib/glib-Spawning-Processes.html > あたりの関数(GLib の g_spawn_* 関数)を使えばよさそうなのですが、 > Ruby-GNOME2ではサポートしないのでしょうか? 正直、GLibまで手が回っていない状態ですので、するか しないかの判断すらしてません。 さかいさんにやっていただくのが一番良いと思うのですが 最近お忙しいようですし。 > 他にも > http://www.gnome.gr.jp/docs/porting-apps-GNOME-2.0/ar01s10.html > に書いている g_utf8_validate() も使いたいです。 パッチ歓迎ですよ(^^;)。 それでは。 -- .:% Masao Mutoh<mu...@hi...> |
From: Masao M. <mu...@hi...> - 2004-04-14 16:11:40
|
むとうです。 On Sat, 10 Apr 2004 02:16:24 +0900 Kazuhiro NISHIYAMA <zn...@mb...> wrote: > 西山和広です。 > 他にも > http://www.gnome.gr.jp/docs/porting-apps-GNOME-2.0/ar01s10.html > に書いている g_utf8_validate() も使いたいです。 とりあえず、これだけ実装してみました。 GLib.utf8_validate(str) #=> true of false です。 GLib::UTF8モジュールを作って GLib::UTF8.validateにしようかなぁとも思ったのですが ちと大げすぎる気がしたのでこのようにしました。 どうでしょう。 -- .:% Masao Mutoh<mu...@hi...> |
From: Kazuhiro N. <zn...@mb...> - 2004-04-15 08:20:55
|
西山和広です。 In <200...@hi...> On Thu, 15 Apr 2004 01:11:32 +0900 Masao Mutoh <mu...@hi...> wrote: > とりあえず、これだけ実装してみました。 > > GLib.utf8_validate(str) #=> true of false > > です。 > > GLib::UTF8モジュールを作って > GLib::UTF8.validateにしようかなぁとも思ったのですが > ちと大げすぎる気がしたのでこのようにしました。 > > どうでしょう。 下につけたような感じで使ってみました。 Errnoのようにlocaleに従ってeuc-jpが入っているエラーメッセージでも UTF-8でソースに埋め込んでいるエラーメッセージでもちゃんと表示できる ようになっていい感じです。 require 'gtk2' Gtk.init # ... def show_message(message, message_type) unless GLib.utf8_validate(message) message = GLib.locale_to_utf8(message) end unless GLib.utf8_validate(message) raise "invalid utf8 message: #{message.dump}" end dialog = Gtk::MessageDialog.new(@window, Gtk::Dialog::MODAL, message_type, Gtk::MessageDialog::BUTTONS_CLOSE, message) dialog.run dialog.destroy end def error_message(exc) show_message("#{exc.inspect}", Gtk::MessageDialog::ERROR) end # ... # エラーメッセージの例 begin File.open("no such file") rescue error_message($!) end -- |ZnZ(ゼット エヌ ゼット) |西山和広(Kazuhiro NISHIYAMA) |
From: Masao M. <mu...@hi...> - 2004-04-15 15:18:24
|
むとうです。 On Thu, 15 Apr 2004 17:20:45 +0900 Kazuhiro NISHIYAMA <zn...@mb...> wrote: > 西山和広です。 > > 下につけたような感じで使ってみました。 > > Errnoのようにlocaleに従ってeuc-jpが入っているエラーメッセージでも > UTF-8でソースに埋め込んでいるエラーメッセージでもちゃんと表示できる > ようになっていい感じです。 それは良かったです。 ところで、UTF-8な環境がメインターゲットで無い場合、 どうせvalidateを2回行うなら先に強引にlocale_to_utf8しちゃう っていう手もありますね。 def show_message(message, message_type) message = GLib.locale_to_utf8(message) unless GLib.utf8_validate(message) raise "invalid utf8 message: #{message.dump}" end #ロケールがUTF-8でも大丈夫のはず...(ホントか?)。 > require 'gtk2' > Gtk.init > > # ... > def show_message(message, message_type) > unless GLib.utf8_validate(message) > message = GLib.locale_to_utf8(message) > end > unless GLib.utf8_validate(message) > raise "invalid utf8 message: #{message.dump}" > end > dialog = > Gtk::MessageDialog.new(@window, > Gtk::Dialog::MODAL, > message_type, > Gtk::MessageDialog::BUTTONS_CLOSE, > message) > dialog.run > dialog.destroy > end > > def error_message(exc) > show_message("#{exc.inspect}", Gtk::MessageDialog::ERROR) > end > # ... > > # エラーメッセージの例 > begin > File.open("no such file") > rescue > error_message($!) > end > > > -- > |ZnZ(ゼット エヌ ゼット) > |西山和広(Kazuhiro NISHIYAMA) > > > > > ------------------------------------------------------- > This SF.Net email is sponsored by: IBM Linux Tutorials > Free Linux tutorial presented by Daniel Robbins, President and CEO of > GenToo technologies. Learn everything from fundamentals to system > administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click > _______________________________________________ > ruby-gnome2-devel-ja mailing list > rub...@li... > https://lists.sourceforge.net/lists/listinfo/ruby-gnome2-devel-ja > -- .:% Masao Mutoh<mu...@hi...> |
From: Kazuhiro N. <zn...@mb...> - 2004-04-26 06:39:38
|
西山和広です。 In <200...@hi...> On Fri, 16 Apr 2004 00:18:15 +0900 Masao Mutoh <mu...@hi...> wrote: > ところで、UTF-8な環境がメインターゲットで無い場合、 > どうせvalidateを2回行うなら先に強引にlocale_to_utf8しちゃう > っていう手もありますね。 > > def show_message(message, message_type) > message = GLib.locale_to_utf8(message) > unless GLib.utf8_validate(message) > raise "invalid utf8 message: #{message.dump}" > end > > #ロケールがUTF-8でも大丈夫のはず...(ホントか?)。 2回やっているのはGtkの中やスクリプトの中からraiseした エラーメッセージはUTF-8のはずなので、それをチェックする ためと、本当にUTF-8としておかしいときにGtkに渡さない ようにするためです。 だからいきなりGlib.locale_to_utf8するとまずいです。 -- |ZnZ(ゼット エヌ ゼット) |西山和広(Kazuhiro NISHIYAMA) |
From: Kazuhiro N. <zn...@mb...> - 2004-04-26 06:42:15
Attachments:
rbglib_spawn.c
|
西山和広です。 In <200...@hi...> On Sat, 10 Apr 2004 02:34:38 +0900 Masao Mutoh <mu...@hi...> wrote: > パッチ歓迎ですよ(^^;)。 とりあえず簡単だったg_spawn_command_line_syncと g_spawn_command_line_asyncだけやってみました。 エラー処理はGSpawnErrorにした方がいいかもしれないですが、 やり方がよくわからなかったのでGErrorのままです。 g_spawn_close_pidもやってみようとしたらDebianのsargeの libglib2.0-0(とlibglib2.0-dev)の2.2.3-1では定義されて いませんでした。 Index: glib/src/rbglib.c =================================================================== RCS file: /cvsroot/ruby-gnome2/ruby-gnome2/glib/src/rbglib.c,v retrieving revision 1.26 diff -u -p -r1.26 rbglib.c --- glib/src/rbglib.c 14 Apr 2004 16:07:13 -0000 1.26 +++ glib/src/rbglib.c 26 Apr 2004 06:18:30 -0000 @@ -19,6 +19,7 @@ VALUE mGLib; extern void Init_utils_int64(); extern void Init_glib_convert(); extern void Init_glib_messages(); +extern void Init_glib_spawn(); extern void Init_gobject(); extern void Init_gutil(); @@ -123,6 +124,7 @@ void Init_glib2() Init_utils_int64(); Init_glib_convert(); Init_glib_messages(); + Init_glib_spawn(); Init_gobject(); Init_gutil(); } -- |ZnZ(ゼット エヌ ゼット) |西山和広(Kazuhiro NISHIYAMA) |
From: Masao M. <mu...@hi...> - 2004-04-27 06:44:16
|
むとう@なぜか家にいます です。 On Mon, 26 Apr 2004 15:42:12 +0900 Kazuhiro NISHIYAMA <zn...@mb...> wrote: > 西山和広です。 > > In <200...@hi...> > On Sat, 10 Apr 2004 02:34:38 +0900 > Masao Mutoh <mu...@hi...> wrote: > > パッチ歓迎ですよ(^^;)。 > > とりあえず簡単だったg_spawn_command_line_syncと > g_spawn_command_line_asyncだけやってみました。 おーありがとうございます。 > エラー処理はGSpawnErrorにした方がいいかもしれないですが、 > やり方がよくわからなかったのでGErrorのままです。 私の方でGSpawnErrorに該当するエラーが出るようにしてみました。 Errnoに該当するエラーの場合はそのエラー、Errnoに登録されて いないエラーはその独自エラーを返します。 クラスの継承関係としては以下です。 SystemCallError +- Errno::EXXX +- GLib::SpawnForkError +- GLib::SpawnReadError +- GLib::SpawnChDirError +- GLib::SpawnFaild ホントはErrno::EXXXを返さずに全て独自エラーを定義することも 考えたのですがそれもどうかなーと思って今の形にしてみました。 > g_spawn_close_pidもやってみようとしたらDebianのsargeの > libglib2.0-0(とlibglib2.0-dev)の2.2.3-1では定義されて > いませんでした。 確かに。Fedoraの2.2.3でも無いです。 とりあえず、HAVE_G_SPAWN_CLOSE_PIDをつけて実装してみました。 あと、ここはモジュールをわけた方が良さそうなので GLib.spawn_command_*をGLib::Spawn.command_*というように 変更しました。 というわけで上記修正をしてCVSに入れておきましたので 確認していただけると助かります。 -- .:% Masao Mutoh<mu...@hi...> |