argv[0]を書き換えるのはあり?

C言語コマンドライン引数をうけとるには

int main(int argc, char *argv[])  {
}

argc, argvを使ってごにょごにょします(略。


今日とあるアプリケーションのコード@Linuxを読んでいたところ argv[0] をプログラム中で上書きしているのを見かけました。
意図としては、ps コマンドを実行したときに表示される、プロセス名を好きなように変更してしまえという感じなのです。


例えば a.out というプログラムを実行して、ps コマンドを実行すると、a.outの名前でプロセスの状態が見ることができます。
これを、a.outのプログラムの中で、argv[0]をhogeに上書きすると、ps コマンドでも hoge と表示されるのです。
ちなみに上書き時には、argvにどれだけスタックが割り当てられているかは考慮していているみたいです。


"proc/self/cmdline" は、READONLYでしかopenできません。


さてここで皆様に質問です。

  • これは C言語的にありなのでしょうか?
    • 害がないからOK?
  • Linux的にありなのでしょうか?
    • 手がかりなし
  • 一般的な手法なのでしょうか?
  • ps コマンドで表示されるプロセス名を合法的に変更する方法はあるのでしょうか?


情報がありましたら教えてくださいませ。(-人-;)