higepon氏がBlog上でLinuxでargv[0]を書き換えたらpsコマンドに反映された。と書いていたのだが、まるでそんなアーキになっていない気がして仕方が無かったので、さっくり調査

実験マシンはRHEL4U2 on IA64.


ソースファイル:

main(int argc, char** argv){
argv[0] = "hoge";
while(1)
;
}


はずかしいバグを入れてしまった(コメント参照のこと)
↓こっちを見てね

#include 

main(int argc, char** argv){
strcpy(argv[0], "hoge");
while(1)
;
}


psコマンド出力結果:

$ ps
PID TTY TIME CMD
19260 pts/2 00:00:00 bash
19283 pts/2 00:00:01 a.out
19284 pts/2 00:00:00 ps


とゆーわけで、Linuxではargv0書き換えは意味がない。に一票。
おぼろげな記憶で書くと、もともとargv0書き換えってBSD系とSYSV系で
動作が違ってるから互換性ないよー
とか言われてなかったっけ?昔。

BSD系はPSコマンドがユーザプロセスの領域みてる(ような気がする)
から、BSD向けのコードなんじゃね?

Linuxではexec時にコマンドライン文字列をcurrent->commにstrcpyしちゃってるからargv[0]書き換えは意味無いと思うな。

Linuxでは、psの出力を誤魔化すような書き換えは出来ないんじゃねーかーとか思っておりまする。

だれか反論プリーズ


追記: よく見たら、すっげー古い記事だったので、いまさらコメントしても何の意味もなかったorz
ここはあろはさんが悪いということにしておこう。