From: Akinori MUSHA Date: 2013-08-05T15:09:25+09:00 Subject: [ruby-dev:47583] Re: [ruby-trunk - Feature #8696] Process.setproctitle At Sun, 4 Aug 2013 10:01:31 +0900, KOSAKI Motohiro wrote: > > 2013/7/30 knu (Akinori MUSHA) : > > > > Issue #8696 has been updated by knu (Akinori MUSHA). 私が言いたかったことを整理すると、 1. $0 のgetter/setterは非対称であり、「$0の別名を作る」という発想でそ の歪みを引き継ぐのは好ましくない。つまり、 setproctitle() するAPIと オリジナルの $0 を返すAPIは別個に用意し、前者の呼出によって後者の値 が影響を受けないようにすべき。 2. 前者はCのAPI上は setter のみなので setproctitle のままでいいし、後 者は setter なしの Process.argv0 でいいのではないか。 という感じです。 1について補足すると、 setproctitle() のない環境では argv をいじっている わけですが、その場合も ARGV は影響を受けませんし、同様に常にオリジナル の $0 の値を返すAPIがあっていいと思います。 > > getproctitle() というAPIはないので、 Process.setproctitle() でいいんじゃないかと思います。 > > $0はベタに Process.argv0 でどうでしょう。argv0という名前はTclに先例があります。 > > 現在すでに $PROGRAM_NAME があるわけですが、argv0はそれより分かりやすさが一段落ちる感じ。 > C言語は当然知ってるよねという前提はいいのかなあ ARGV があるので、少なくとも検索の手がかりがないということはなさそう。 > getproctitle()というAPIはないというご指摘ですが、Rubyで最後に設定した文字列を覚えておくだけなので > あまり障害になるとは考えていません。 > すごい長い文字列を与えた時にsetproctitle()側で勝手に切り詰める仕様があったりすると不一致になりますが > 実用上は問題にならないでしょう。それともFreeBSDのような頭にprefix勝手につけるようなsetproctitle()実装を > 心配している? そうですね。不可逆な操作であるということが見えなくなるというのは懸念と してはあります。 しかしそれよりも、 getproctitle() がないということはまず初期値をどうす るか、プログラムの他の部分で setproctitle() されたらその値を反映すべき か(主に Ruby を組み込んだプログラムを想定しています)というところも考 える必要がありますね。