higepon氏がBlog上でLinuxでargv[0]を書き換えたらpsコマンドに反映された。と書いていたのだが、まるでそんなアーキになっていない気がして仕方が無かったので、さっくり調査
実験マシンはRHEL4U2 on IA64.
ソースファイル:
はずかしいバグを入れてしまった(コメント参照のこと)
↓こっちを見てね
psコマンド出力結果:
とゆーわけで、Linuxではargv0書き換えは意味がない。に一票。
おぼろげな記憶で書くと、もともとargv0書き換えってBSD系とSYSV系で
動作が違ってるから互換性ないよー
とか言われてなかったっけ?昔。
BSD系はPSコマンドがユーザプロセスの領域みてる(ような気がする)
から、BSD向けのコードなんじゃね?
Linuxではexec時にコマンドライン文字列をcurrent->commにstrcpyしちゃってるからargv[0]書き換えは意味無いと思うな。
Linuxでは、psの出力を誤魔化すような書き換えは出来ないんじゃねーかーとか思っておりまする。
だれか反論プリーズ
追記: よく見たら、すっげー古い記事だったので、いまさらコメントしても何の意味もなかったorz
ここはあろはさんが悪いということにしておこう。
実験マシンは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
ここはあろはさんが悪いということにしておこう。
- 関連記事
-
- [あとで試す」 prctl (2006/09/14)
- argv[0] を書き換えるとpsコマンドに反映されるか (2006/09/14)
- [/procシリーズ]共有メモリ関係のカスタマイズ項目について (2006/07/22)
Darwinで確認しました。
argv[0] = "hoge";
ではなくて
strcpy( argv[0], "hoge" );
ですね。メモリ壊してもしーらないっと。
argv[0] = "hoge";
ではなくて
strcpy( argv[0], "hoge" );
ですね。メモリ壊してもしーらないっと。
2006-09-14 木 01:46:39 |
URL |
よっふぃ~ #- [ 編集]
ご指摘ありがとうございます m(_ _)m
これはちょっと恥ずかしいですね。
ま、結論に変わりはないわけですが・・・
これはちょっと恥ずかしいですね。
ま、結論に変わりはないわけですが・・・
2006-09-14 木 05:46:33 |
URL |
kosaki #- [ 編集]
linux は ps の 仕様で BSD style と SYSV style で見え方が違います。 以下を試してみたら?
main(int argc, char *argv[])
{
strcpy(argv[0], "wao");
system("/bin/ps f");
system("/bin/ps ");
exit(0);
}
main(int argc, char *argv[])
{
strcpy(argv[0], "wao");
system("/bin/ps f");
system("/bin/ps ");
exit(0);
}
2006-09-15 金 21:01:41 |
URL |
alley-cats #- [ 編集]
結論としては、今回のようなコードでは、Linux でも BSD系でも、ps で出力されるプロセス名が変わることはないということなのでしょうか。
FreeBSD 6.1 で試してもプロセス名は変わりませんでした。
FreeBSD 6.1 で試してもプロセス名は変わりませんでした。
linux は ps のオプションによって変って見えたり、見えなかったりするという意味なんだけど。
ps とか ps -ef では変って見えないけど、ps f とか ps ax とかだと変って見えませんか?
ps とか ps -ef では変って見えないけど、ps f とか ps ax とかだと変って見えませんか?
2006-09-17 日 06:36:36 |
URL |
alley-cats #- [ 編集]
alley-catsさん、貴重な情報ありがとうございます。
面白いので、もうちょっと調べてから別のエントリに起こそうと思います。
面白いので、もうちょっと調べてから別のエントリに起こそうと思います。
2006-09-18 月 08:45:55 |
URL |
kosaki #- [ 編集]
takaBSD さん>
つまり、僕が間違っていました。ごめんなさい。
と、いうことです。
つまり、僕が間違っていました。ごめんなさい。
と、いうことです。
2006-09-18 月 19:36:14 |
URL |
kosaki #- [ 編集]
Mac OS Xでは変わった。
2006-09-19 火 05:45:02 |
URL |
anonymous #- [ 編集]
cygwinでは変わらなかったですな。
2006-09-22 金 01:43:45 |
URL |
anonymous #- [ 編集]
あきらかにカーネルの支援がないと出来ない機能なので、Cygwinではつらそうですのぅ・・
2006-09-22 金 02:00:15 |
URL |
kosaki #- [ 編集]
このコメントは管理人のみ閲覧できます
2007-09-02 日 09:45:42 |
|
# [ 編集]
このコメントは管理人のみ閲覧できます
2007-09-02 日 22:45:10 |
|
# [ 編集]