在BSD风格的系统中,‘ps’程序实际上审视运行进程的地址空间从而找到当前 的‘argv[]’,并显示它。这使得程序可以通过简单的修改‘argv[]’以改变它的 名字。
在SysV风格的系统中,命令的名字和参数的一般头80字节是存放在进程的u-区( u-area), 所以不能被直接修改。可能有一个系统调用用来修改它(不象是这样), 但是其它的话,只有一个方法就是实施一个‘exec()’,或者些内核内存(危险, 而且只有root才有可能)。
一些系统(值得注意的是Solaris)可以有‘ps’的两种不同版本,一种是在 ‘/usr/bin/ps’拥有SysV的行为,而另一种在‘/usr/ucb/ps’拥有BSD的行为。在 这些系统中,如果你改变‘argv[]’,那么BSD版的‘ps’将反映这个变化,而 SysV版将不会。
检查你的系统是否有一个函数‘setproctitle()’。