Perlの $0の変更に関するメモ

少し前に kfreebsdで $0を変更しても psの結果に反映されない
ことについて調べたのでメモ。

ソースコード

https://github.com/mirrors/perl/blob/blead/mg.c#L2981

mg.cの Perl_magic_set関数の switch文の case '0'の部分です。

処理の流れ

以下のいずれかを実行する

  • setproctitle関数を呼ぶ

BSD系のOSで実装される関数

HP-UXで実装されるシステムコール

  • argv[0]を書き換える

setproctitle, pstatが実装されていない場合。

Linuxで実装されるシステムコール。よくわからないがこのときは
argv[0]の書き換えも実行される。


kfreebsdはカーネルFreeBSDユーザランドDebian GNU/Linux
いう構成なので、setproctitleも prctlも実装されておらず、さらに
argv[0]の書き換えも意味がないということで、$0の変更が psの結果に反映
されなかったようです。


kfreebsdはこのあたりのインタフェースの扱いをどうするんでしょうかね。
これから実装するんでしょうかね?一応 Debianに libbsdという、
BSDユーティリティを実装したライブラリがあるんですが、結構未実装
なのでまだ使えなさそうな感じです。