对于多进程的程序,由于会针对同一可执行文件起多个进程,这样用ps –ef会看到多个同名的进程在运行。存在辨别到底是哪个进程的问题,所要要针对每一个进程取一个唯一的名字。
搜索了一下,发现网上的方法都是修改argv[0],但是此方法只在linux成功。而在Solaris10上,此方法只对/usr/ucb/ps生效,而对默认的ps(即/usr/bin/ps)不生效。
试了几个方法,最后使用包装程序+exec搞定了此问题。方法如下:
假设要运行的程序的代码如下:
//test.cpp
#include <unistd.h>
int main()
{
pause();
return 0;
}
将其编译成test。
包装程序的代码如下,要将进程名改成1234:
//change_process_name.cpp
#include <unistd.h>
#include <sys/types.h>
int main()
{
pid_t pid = fork();
if(0 == pid)
{
execl("./test", "1234", (char*)0);
}
pause();
return 0;
}
将其编译成change_process_name。
运行change_procee_name
运行ps -ef | grep change_procee_name:
root 4449 19184 0 13:24:46 pts/7 0:00 ./change_process_name
再运行ps -ef | grep 4449,可以看到进程名已经变成1234了:
w2liu 4450 4449 0 13:24:46 pts/7 0:00 1234
以上方法在Solaris10和CentOS5.5上测试通过。