我有一个服务器应用程序,它会分叉几个子进程。当使用ps
,top
或prstat
显示进程时,它们显示的完全类似于父进程。我可以通过他们的pid
和ppid
找出哪个是父母和孩子,但很快就会变得困难。我想略微更改子进程的名称,以便我可以快速查看哪些做了什么。
我尝试了几种在Linux上都有瑕疵的技巧,但它们并不适用于Solaris。有谁知道如何做到这一点,最好是在平原C.
其中一种方法是为子进程创建一个真正的可执行程序,并从fork调用其中一个exec
方法。
这样,分叉进程将被新的可执行文件“替换”。
这些方面的东西:
pid_t child_pid = fork( );
switch ( child_pid )
{
case -1:
die( );
return;
case 0:
// setup argv ...
static const char* argv[] =
{
"prog_name",
NULL
};
execv( *argv, (char**) argv );
// No code should be executed beyond this point
fprintf(
stderr,
"%s fork: execv failed: %d (%s)\n",
argv[ 0 ],
errno,
strerror( errno )
);
die( );
return;
default:
break;
}