[#15067] rb_eval_string — OJ <oj@...7.com>

OJです。

39 messages 2001/11/08
[#15068] Re: rb_eval_string — nobu.nakada@... 2001/11/08

なかだです。

[#15069] Re: rb_eval_string — OJ <oj@...7.com> 2001/11/08

OJです。

[#15071] Re: rb_eval_string — nobu.nakada@... 2001/11/09

なかだです。

[#15077] Re: rb_eval_string — OJ <oj@...7.com> 2001/11/09

OJです。

[#15078] Re: rb_eval_string — WATANABE Hirofumi <eban@...> 2001/11/09

わたなべです。

[#15083] Re: rb_eval_string — "U.Nakamura" <usa@...> 2001/11/09

こんにちは、なかむら(う)です。

[#15088] Re: rb_eval_string — nobu.nakada@... 2001/11/09

なかだです。

[#15089] Re: rb_eval_string — "U.Nakamura" <usa@...> 2001/11/09

こんにちは、なかむら(う)です。

[#15092] Re: rb_eval_string — nobu.nakada@... 2001/11/09

なかだです。

[#15096] Re: rb_eval_string — "U.Nakamura" <usa@...> 2001/11/09

こんにちは、なかむら(う)です。

[#15109] Re: rb_eval_string — WATANABE Hirofumi <eban@...> 2001/11/12

わたなべです。

[#15112] Re: rb_eval_string — "U.Nakamura" <usa@...> 2001/11/12

こんにちは、なかむら(う)です。

[#15114] Re: rb_eval_string — WATANABE Hirofumi <eban@...> 2001/11/12

わたなべです。

[#15115] Re: rb_eval_string — "U.Nakamura" <usa@...> 2001/11/12

こんにちは、なかむら(う)です。

[#15119] Re: rb_eval_string — WATANABE Hirofumi <eban@...> 2001/11/12

わたなべです。

[#15121] Re: rb_eval_string — "U.Nakamura" <usa@...> 2001/11/12

こんにちは、なかむら(う)です。

[#15124] Re: rb_eval_string — WATANABE Hirofumi <eban@...> 2001/11/12

わたなべです。

[#15126] Re: rb_eval_string — "U.Nakamura" <usa@...> 2001/11/12

こんにちは、なかむら(う)です。

[#15174] strange behavior about PTY.spawn — akira yamada / やまだあきら <akira@...>

18 messages 2001/11/15
[#15176] Re: strange behavior about PTY.spawn — matz@... (Yukihiro Matsumoto) 2001/11/15

まつもと ゆきひろです

[#15251] Re: [ruby-ext:01999] Re: syslog module is becoming ready — "Akinori MUSHA" <knu@...>

 というわけで 1.7 に syslog モジュールを入れました。

43 messages 2001/11/26

[#15270] ruby on NetBSD — "U.Nakamura" <usa@...>

こんにちは、なかむら(う)です。

25 messages 2001/11/28
[#15271] Re: ruby on NetBSD — Takahiro Kambe <taca@...> 2001/11/28

In message <20011128181510.3D11.USA@osb.att.ne.jp>

[#15272] Re: ruby on NetBSD — "U.Nakamura" <usa@...> 2001/11/28

こんにちは、なかむら(う)です。

[#15278] Re: ruby on NetBSD — Takahiro Kambe <taca@...> 2001/11/28

In message <20011128182726.3D14.USA@osb.att.ne.jp>

[#15296] Re: ruby on NetBSD — "U.Nakamura" <usa@...> 2001/11/29

こんにちは、なかむら(う)です。

[#15298] time.rb — Tanaka Akira <akr@...17n.org>

というわけで、timex.rb 改め time.rb が rough に入ったのでご意見募集です。

27 messages 2001/11/29

[ruby-dev:15231] Re: strange behavior about PTY.spawn

From: matz@... (Yukihiro Matsumoto)
Date: 2001-11-20 17:52:14 UTC
List: ruby-dev #15231
まつもと ゆきひろです

In message "[ruby-dev:15230] Re: strange behavior about PTY.spawn"
    on 01/11/20, akira yamada / やまだあきら <akira@ruby-lang.org> writes:

|In article 15228, <1006225782.050638.1172.nullmailer@ev.netlab.jp>
|Y> こういう場合はAPIから考えた方が良いように思います。このパッ
|
|一応APIを考えてはみてるんですが… (^_^;
|APIをちゃんと示して提案しなければなりませんでしたね. 

ま、コードに全ての情報を含んでいるといえばその通りなのですが、
やはりわかりづらいですよね。

|そういう形でもよいです. 
|その点に関してどうするのがよいのかわかりませんでした. 
|
|  * Threadセーフになること
|  * 子供の終了時の状態がわかること
|
|ができるようになるとうれしいです. 
|あとforkした後でexecに失敗した場合に
|_exit(1)までいかなくなってしまったので
|その点についてちょっと手を入れているつもりです. 

ありがとうございます。その辺は取り込みます。
で、Process::Statusを返したほうが良いとは思うのですが、以下
のようなAPIになってしまったのは嬉しいんだか嬉しくないんだか
良く分かりません。意見を求めます。

ptyだけでなく本体も修正する必要がありました。

---
require 'runit/testcase'
require 'runit/cui/testrunner'
require 'pty'

class TestPTY < RUNIT::TestCase
  def setup
    @s = Signal::list
  end

  def test_STOP
    pid = nil
    e = assert_exception(PTY::ChildExited) {
      PTY.spawn('/bin/sh') {|rd,wr,pid|
	assert_equal(1, Process.kill(@s['STOP'], pid))
	sleep 1
      }
    }
    assert(pid != nil)
    assert_equal(1, Process.kill(0, pid))
    assert_equal(nil, e.status.exitstatus)
    assert_equal(nil, e.status.termsig)
    assert_equal(true, e.status.stopped?)
  end
  def test_KILL
    pid = nil
    e = assert_exception(PTY::ChildExited) {
      PTY.spawn('/bin/sh') {|rd,wr,pid|
	assert_equal(1, Process.kill(@s['KILL'], pid))
	sleep 1
      }
    }
    assert(pid == pid)
    assert(pid != nil)
    assert_exception(Errno::ESRCH) {Process.kill(0, pid)}
    assert_equal(nil, e.status.exitstatus)
    assert_equal(@s['KILL'], e.status.termsig)
    assert_equal(false, e.status.stopped?)
  end
  def test_exit1
    pid = nil
    e = assert_exception(PTY::ChildExited) {
      PTY.spawn('/bin/sh'){|rd,wr,pid|
	wr.puts 'echo 123'
	wr.puts 'exit 0'
	loop {rd.sysread(1024)} rescue IOError
      }
    }
    assert_exception(Errno::ESRCH) {Process.kill(0, pid)}
    assert_equal(0, e.status.exitstatus)
    assert_equal(nil, e.status.termsig)
    assert_equal(false, e.status.stopped?)
  end
  def test_exit2
    pid = nil
    e = assert_exception(PTY::ChildExited) {
      PTY.spawn('sleep 3') {|rd,wr,pid|
	assert_equal(1, Process.kill(0, pid))
	sleep
      }
    }
    assert_exception(Errno::ESRCH) {Process.kill(0, pid)}
    assert_equal(0, e.status.exitstatus)
    assert_equal(nil, e.status.termsig)
    assert_equal(false, e.status.stopped?)
  end
  def test_notexist
    pid = nil
    e = assert_exception(PTY::ChildExited) {
      PTY.spawn('/not exist') {|rd,wr,pid|
	sleep 3
	assert_fail
      }
    }
    assert_equal(1, e.status.exitstatus)
    assert_equal(nil, e.status.termsig)
    assert_equal(false, e.status.stopped?)
  end

  def test_thSTOP
    th = Thread.new {test_STOP}
    loop {sleep 0.5; break unless th.alive?}
  end
  def test_thKILL
    th = Thread.new {test_KILL}
    loop {sleep 0.5; break unless th.alive?}
  end
  def test_thexit1
    th = Thread.new {test_exit1}
    loop {sleep 0.5; break unless th.alive?}
  end
  def test_thexit2
    th = Thread.new {test_exit2}
    loop {sleep 0.5; break unless th.alive?}
  end
  def test_thnotexist
    th = Thread.new {test_notexist}
    loop {sleep 0.5; break unless th.alive?}
  end
end

if $0 == __FILE__
  if ARGV.size == 0
    suite = TestPTY.suite
  else
    suite = RUNIT::TestSuite.new
    ARGV.each do |testmethod|
      suite.add(TestPTY.new(testmethod))
    end
  end
  RUNIT::CUI::TestRunner.run(suite)
end

In This Thread