我有一个服务器应用程序,它会分叉几个子进程。使用ps
,top
或prstat
显示流程时,它们的显示方式与父流程完全相同。我可以通过他们的pid
和ppid
找出父母和孩子,但很快就会遇到困难。我想略微更改子进程的名称,以便我可以快速查看哪些做了什么。
我尝试了一些在Linux上发挥作用的技巧,但它们并不适用于Solaris。有没有人知道如何做到这一点,最好是在简单的C中。
答案 0 :(得分:1)
其中一种方法是为子进程创建一个真正的可执行程序,并从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;
}