[#12387] reducing logical operation — "Nobuyoshi.Nakada" <nobu.nakada@...>

なかだです。

17 messages 2001/03/07
[#12388] Re: reducing logical operation — EGUCHI Osamu <eguchi@...> 2001/03/07

えぐち@エスアンドイー です。

[#12389] Re: reducing logical operation — nobu.nakada@... 2001/03/07

なかだです。

[#12391] Re: reducing logical operation — EGUCHI Osamu <eguchi@...> 2001/03/07

えぐち@エスアンドイー です。

[#12404] fork in threads — keiju@... (Keiju ISHITSUKA)

けいじゅ@日本ラショナルソフトウェアです.

14 messages 2001/03/09

[#12405] at_exit — keiju@... (Keiju ISHITSUKA)

けいじゅ@日本ラショナルソフトウェアです.

15 messages 2001/03/09
[#12409] Re: at_exit — matz@... (Yukihiro Matsumoto) 2001/03/10

まつもと ゆきひろです

[#12411] Re: at_exit — keiju@... (石塚圭樹) 2001/03/10

けいじゅ@日本ラショナルソフトウェアです.

[#12425] bignum % の結果が負数になることがある — Hisayasu Nakao <h-nakao@...>

最近、ruby-1.6.2を使い出したばかりの中尾です。

39 messages 2001/03/12
[#12427] Re: bignum % の結果が負数になることがある — WATANABE Hirofumi <eban@...> 2001/03/12

わたなべです。

[#12463] Re: bignum % の結果が負数になることがある — Takahiro Kambe <taca@...> 2001/03/13

In message <4518-Mon12Mar2001145434+0900-eban@os.rim.or.jp>

[#12464] Re: bignum % の結果が負数になることがある — matz@... (Yukihiro Matsumoto) 2001/03/13

まつもと ゆきひろです

[#12466] Re: bignum % の結果が負数になることがある — Takahiro Kambe <taca@...> 2001/03/13

In message <984469222.234203.1007.nullmailer@ev.netlab.zetabits.com>

[#12475] Re: bignum % の結果が負数になることがある — matz@... (Yukihiro Matsumoto) 2001/03/14

まつもと ゆきひろです

[#12476] Re: bignum % の結果が負数になることがある — Takahiro Kambe <taca@...> 2001/03/14

In message <984550885.417146.3670.nullmailer@ev.netlab.zetabits.com>

[#12480] Re: bignum % の結果が負数になることがある — matz@... (Yukihiro Matsumoto) 2001/03/14

まつもと ゆきひろです

[#12481] Re: bignum % の結果が負数になることがある — Takahiro Kambe <taca@...> 2001/03/14

In message <984553493.009507.3747.nullmailer@ev.netlab.zetabits.com>

[#12488] Re: bignum % の結果が負数になることがある — matz@... (Yukihiro Matsumoto) 2001/03/14

まつもと ゆきひろです

[#12493] Re: bignum % の結果が負数になることがある — Takahiro Kambe <taca@...> 2001/03/14

In message <984579430.080967.5569.nullmailer@ev.netlab.zetabits.com>

[#12578] require 'win32api' — Kazuhiro NISHIYAMA <zn@...>

require 'win32api'のエラーメッセージがわかりにくいと

21 messages 2001/03/20
[#12579] Re: require 'win32api' — nobu.nakada@... 2001/03/20

なかだです。

[#12598] Re: require 'win32api' — nobu.nakada@... 2001/03/21

なかだです。

[#12582] finalizer problem — keiju@... (Keiju ISHITSUKA)

けいじゅ@日本ラショナルソフトウェアです.

20 messages 2001/03/20
[#12583] Re: finalizer problem — matz@... (Yukihiro Matsumoto) 2001/03/20

まつもと ゆきひろです

[#12585] Re: finalizer problem — keiju@... (石塚圭樹) 2001/03/20

けいじゅ@日本ラショナルソフトウェアです.

[#12591] Re: finalizer problem — matz@... (Yukihiro Matsumoto) 2001/03/20

まつもと ゆきひろです

[#12619] Re: finalizer problem — keiju@... (石塚圭樹) 2001/03/22

けいじゅ@日本ラショナルソフトウェアです.

[#12605] extern inline (ruby.h) ruby-1.6.3 — WATANABE Tetsuya <tetsu@...>

渡辺哲也です。

17 messages 2001/03/22
[#12606] Re: extern inline (ruby.h) ruby-1.6.3 — matz@... (Yukihiro Matsumoto) 2001/03/22

まつもと ゆきひろです

[#12607] Re: extern inline (ruby.h) ruby-1.6.3 — WATANABE Tetsuya <tetsu@...> 2001/03/22

渡辺哲也です。

[#12608] Re: extern inline (ruby.h) ruby-1.6.3 — matz@... (Yukihiro Matsumoto) 2001/03/22

まつもと ゆきひろです

[#12674] Was: [rubyist:0454] Re: to_str — Kenichi Komiya <kom@...1.accsnet.ne.jp>

21 messages 2001/03/25
[#12675] Re: Was: [rubyist:0454] Re: to_str — matz@... (Yukihiro Matsumoto) 2001/03/26

まつもと ゆきひろです

[#12678] Re: Was: [rubyist:0454] Re: to_str — Kenichi Komiya <kom@...1.accsnet.ne.jp> 2001/03/26

[#12681] Re: Was: [rubyist:0454] Re: to_str — matz@... (Yukihiro Matsumoto) 2001/03/26

まつもと ゆきひろです

[#12687] Re: Was: [rubyist:0454] Re: to_str — Kenichi Komiya <kom@...1.accsnet.ne.jp> 2001/03/27

[#12688] Re: Was: [rubyist:0454] Re: to_str — matz@... (Yukihiro Matsumoto) 2001/03/28

まつもと ゆきひろです

[#12710] Re: Was: [rubyist:0454] Re: to_str — Kenichi Komiya <kom@...1.accsnet.ne.jp> 2001/03/31

[ruby-dev:12460] Re: at_exit

From: keiju@... (石塚圭樹)
Date: 2001-03-13 06:20:05 UTC
List: ruby-dev #12460
けいじゅ@日本ラショナルソフトウェアです.

In [ruby-dev :12443 ] the message: "[ruby-dev:12443] Re: at_exit ", on
Mar/13 01:51(JST) Yukihiro Matsumoto writes:

>まつもと ゆきひろです

>|と思いましたが. 今一です...
>|
>|Thread.start do
>|  begin
>|    ...
>|  ensure
>|    ...
>|  end
>|end
>|
>|でensure(rescueでもよし)プロセスの終了時に呼ばれているのか, スレッドが本
>|当に終わっているのか, はたまた例外なのかが簡単にわかる方法ってあります?
>
>えーと、
>
>>どういうシチュエーションでなにが必要なのかもうちょっとはっき
>>りするといいかもしれませんね。
>
>を繰り返さざるをえません。(自分で決めた)解答から始めるんじゃ
>なくて、解決したい問題から始めてくださいな。本当に区別する必
>要があるんですか?

何をやっているかというと, 昔shell.rbってありましたよね
[ruby-list:7262]. 松本さんも絶賛で[ruby-list:7263], つい最近まで標準添付
ライブラリになっていたのですが...  知らないうちに標準添付から外されてい
まいました(;_; で, 悔しかったので完全版を作成中です. おかげさまで, ほと
んどの問題は解決したんですが, まだ問題が幾つか残っていまして...

まず, Shellの動作原理ですが....

  sh.cat("/etc/printcap") | sh.tee("tee1") >> "tee2"

みたいなこととか

  print sh.cat("/etc/passwd").head.collect{|l| l =~ /keiju/}

みたいなことができるように, パイプの処理は別スレッドで行っています. とい
うのも, 

  sh.cat("/etc/printcap") | sh.tee("tee1") >> "tee2"

は, sh.cat("/etc/printcap"), sh.tee("tee1"), "tee2" が実行されて, そのあ
と >>, | の順に実行されるので, コマンドの実行後にpipeの結合が行われるか
らです. それなら, pipe結合されるまで実行しなければいいんでは? って話もあ
るかもしれませんが, そうでもなく, 上記で sh.cat... が実行された後,
pipeされるかどうかはわかりません. それで何をやっているかというと

sh.cat を実行するとすぐその結果を親プロセス側のQueueにいれてバッファリ
ングしはじめます, で, そのあと sh.tee も同様に行い | が来たときに上記
Queueの内容をsh.teeに出力するようにしています.

そうすると, 基本的な動作はOKなんですが... まだプロセス終了の問題がありま
して... 

上記の処理はすべて裏方threadが行っていますので, メインスレッドが終了する
と, プロセスが終了しちゃいますので裏方threadが幾ら仕事をしたいと言っても,
とまっちゃうんですよね... すると, 実行中のコマンドもIOがcloseされて止っ
てしまうと...

で今やっているのが, 以下の感じとか

## waitpid部分
      th = Thread.start {
	begin
#	  @job_monitor.synchronize do
	    _pid = nil
	    begin
	      _pid = Process.waitpid(pid, nil)
	    rescue Errno::ECHILD
	      print "shell: warn: job#{command.name}(#{pid}) was done already waitipd.\n" if @shell.verbose?
	      _pid = true
	    ensure
	      # プロセス終了時にコマンド実行が終わるまで待たせるため.
	      raise AT_EXIT unless _pid
	      terminate_job(command)
#	      @job_condition.signal
	      printf "Finish: %d\n", pid if @shell.debug?
	    end
#	  end
	rescue AT_EXIT
	  retry
	end
      }

こんなかんじとか...

## pipe読み込み部分
      Thread.start {
	print "<imp##{@command}>\n" if @shell.debug?
	rs = @shell.record_separator unless rs
	loop do
	  begin
	    eop = true
	    while l = @pipe_in.gets
	      @input_queue.push l
	    end
	    eop = false
	  rescue Errno::EPIPE
	    eop = false
	  ensure
	    next if eop

	    print "EOF##{@command}\n" if @shell.debug?
	    @input_queue.push :EOF
	    @pipe_in.close
	    break
	  end
	end
      }

で, 一応実現できているのですが, もうちょっとどうにかならんかと....


__
..............................石塚 圭樹@日本ラショナルソフトウェア...
----------------------------------->> e-mail: keiju@rational.com <<---

In This Thread