[#44725] Set[Set[1]]==Set[Set[1]] は偽? — "5.5" <5.5@...>

5.5 です。

22 messages 2008/03/04

[#44782] $stdin.rewind が exec した子プロセスに伝わらない? — SATOH Fumiyasu <fumiyas@...>

さとうふみやす @ OSS テクノロジです。

11 messages 2008/03/17
[#44783] Re: $stdin.rewind が exec した子プロセスに伝わらない? — Kazuhiro NISHIYAMA <zn@...> 2008/03/17

西山和広です。

[ruby-list:44790] Re: $stdin.rewind が exec した子プロセスに伝わらない?

From: SATOH Fumiyasu <fumiyas@...>
Date: 2008-03-18 10:26:11 UTC
List: ruby-list #44790
さとうふみやす @ OSS テクノロジです。
おつきあいいただき、ありがとうございます。

At Tue, 18 Mar 2008 18:58:13 +0900,
Kazuhiro NISHIYAMA wrote:
> > シェルを介したくないんですが、IO.popen でできましたっけ?
> 
> "-"でpopenしてexecでできそうです。

なるほど。Perl と一緒ですね。(ちょっと違うか?)

  use IO::File;
  my $fh = IO::File->new;
  my $pid = $fh->open('-|');

> >   system([cmd, cmd], args)
>
> 普通は複数引数のsystemの方が簡単に安全になるので、
> 私も普通は複数引数を使っています。
> 
> argv[0]をわざわざ指定したいことはあまりないので、
> そこは違いますが。

引数がない場合は system([cmd, cmd]) とするしかない(?)し、
ある場合とで使い分けるのが嫌なので、私は常に指定しますね。
(さすがに 1-liner とかではしませんが)

> > 我ながらうまく書けた (自画自賛 :-) と思っているんですが、
> > ダメ出しあるなら頂けると嬉しいです。> all
> 
> ダメ出しというより好みの問題に近いですが、Process.forkは
> ブロック付きの方が子プロセスはここだけ、という感じがするし、

なるほど。そのほうがいいと思うので、今後はそうすることにします。

> exit!を忘れてもブロックから抜けることがないので便利です。

ちなみに、先の引用元のプログラムは、失敗したときは exit! で
死なないと駄目な理由があります。

> exit!(1)は失敗という意味だけでいいのならexit!(false)という
> のもあります。

exit!(false) でプロセスの終了コードが 0 以外になることが
保証がされているなら、そのほうがいいかもしれませんね。

> unless stdout_reader_th.join(@timeout)というのは
> スレッドをnilかfalseを返す可能性がある実装に変えて
> しまうとはまりそう、と思ってしまいました。

`ri Thread#join` によると:

------------------------------------------------------------ Thread#join
     thr.join          => thr
     thr.join(limit)   => thr
------------------------------------------------------------------------
     The calling thread will suspend execution and run thr. Does not
     return until thr exits or until limit seconds have passed. If the
     time limit expires, nil will be returned, otherwise thr is
     returned.
        ...

なので、タイムアウト時に nil、それ以外はスレッドオブジェクトが
返ると思っていたのですが、マニュアルが間違っていますか?

-- 
-- Name: SATOH Fumiyasu (fumiyas @ osstech co jp)
-- Business Home: http://www.OSSTech.co.jp/
-- Personal Home: http://www.SFO.jp/blog/

In This Thread