[#41918] [Feature #3647] Array#sample(n, replace=false) — Kenta Murata <redmine@...>

Feature #3647: Array#sample(n, replace=false)

11 messages 2010/08/03

[#41966] [Bug #3673] PTY.getpty with IO.pipe doesn't finish on FreeBSD — Yui NARUSE <redmine@...>

Bug #3673: PTY.getpty with IO.pipe doesn't finish on FreeBSD

9 messages 2010/08/10

[#41969] [Feature #3675] String#prepend, String#>> — Sora Harakami <redmine@...>

Feature #3675: String#prepend, String#>>

15 messages 2010/08/10
[#41976] Re: [Feature #3675] String#prepend, String#>> — Yukihiro Matsumoto <matz@...> 2010/08/10

まつもと ゆきひろです

[#41974] Re: [ruby-cvs:36157] Ruby:r28955 (trunk): * complex.c (nucomp_to_[ifr]): don't allow complex with in-exact — Yukihiro Matsumoto <matz@...>

まつもと ゆきひろです

7 messages 2010/08/10

[#42003] WEBrickに関するセキュリティ修正 (CVE-2010-0541) — Hideki Yamane <henrich@...>

12 messages 2010/08/11

[#42090] Math::atan2(0, 0) on ruby 1.9.2 — KUBO Takehiro <kubo@...>

久保です。

18 messages 2010/08/22
[#42092] Re: Math::atan2(0, 0) on ruby 1.9.2 — Kenta Murata <muraken@...> 2010/08/22

=1B$B$`$i$?$G$9!#=1B(B

[#42166] Ruby'sライセンスの、BSDLとのデュアルライセンスへの変更 — "NARUSE, Yui" <naruse@...>

Ruby's ライセンスは BSDL と Ruby's のデュアルライセンスになります。

14 messages 2010/08/31

[ruby-dev:41968] Re: [Bug #3673] PTY.getpty with IO.pipe doesn't finish on FreeBSD

From: Tanaka Akira <akr@...>
Date: 2010-08-10 07:21:03 UTC
List: ruby-dev #41968
2010年8月10日10:53 Yui NARUSE <redmine@ruby-lang.org>:
>
> 以下のプログラムが FreeBSD で終了しません。
> (test/ruby/test_rubyoptions.rb  の test_script_from_stdin より)
> Ubuntu 8.04 や Mac OS X 10.6 では終わることを確認しています。

単純化してみました。
パイプは関係ありません。

freebsd8(16:07:56)% cat z.rb
require 'pty'
PTY.getpty('sleep 1') do |r, w, pid|
  p pid
  w.print("a")
  Process.wait pid
end
puts :fin

freebsd8(16:07:58)% ./ruby -v z.rb
ruby 1.9.3dev (2010-08-07 trunk 28906) [i386-freebsd8.1]
32576
(ここでハング)

他の端末から ps してみると、以下のようになります。

freebsd8(16:07:25)% ps u32576
USER   PID %CPU %MEM   VSZ   RSS  TT  STAT STARTED      TIME COMMAND
akr  32576  0.0  0.1  1536   504   7- SEs+  4:07PM   0:00.00 sleep 1

STAT の意味は

   S       Marks a process that is sleeping for less than about 20
	   seconds.
   E       The process is trying to exit.
   s       The process is a session leader.
   +       The process is in the foreground process group of its
	   control terminal.

ということで、E のままで終わらないのがわかりません。

また、sleep 1 を ktrace sleep 1 にして kdump すると、

freebsd8(16:18:10)% kdump -E
...
 33428 sleep    0.001572 RET   sigprocmask 0
 33428 sleep    0.001611 CALL  nanosleep(0xbfbfeaac,0)
 33428 sleep    1.001607 RET   nanosleep 0
 33428 sleep    1.001672 CALL  sigprocmask(SIG_BLOCK,0x2807acc0,0xbfbfea10)
 33428 sleep    1.001681 RET   sigprocmask 0
 33428 sleep    1.001688 CALL  sigprocmask(SIG_SETMASK,0x2807acd0,0)
 33428 sleep    1.001693 RET   sigprocmask 0
 33428 sleep    1.001712 CALL  sigprocmask(SIG_BLOCK,0x2807acc0,0xbfbfe9d0)
 33428 sleep    1.001718 RET   sigprocmask 0
 33428 sleep    1.001723 CALL  sigprocmask(SIG_SETMASK,0x2807acd0,0)
 33428 sleep    1.001742 RET   sigprocmask 0
 33428 sleep    1.001757 CALL  exit(0)

というように nanosleep で 1秒待った後、exit(0) を呼んでいるようなのが
観察されます。
-- 
[田中 哲][たなか あきら][Tanaka Akira]

In This Thread