您可以prctl
为此使用系统调用。它有一个可怕的界面,但如果你克服了这一点,将它用于这项任务是相当直接的。这是一个最小的例子。
#include <stdio.h> /* perror() */
#include <stdlib.h> /* NULL */
#include <sys/prctl.h> /* prctl(), PR_SET_NAME */
#include <sys/types.h> /* wait() */
#include <sys/wait.h> /* wait() */
#include <unistd.h> /* fork(), sleep() */
int
main()
{
const char * name = "it_worked";
switch (fork())
{
case 0:
if (prctl(PR_SET_NAME, (unsigned long) name) < 0)
perror("prctl()");
sleep(10);
break;
case -1:
perror("fork()");
break;
default:
if (wait(NULL) < 0)
perror("wait()");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我将此程序编译为一个名为的可执行文件a.out
然后运行./a.out & ps
,我可以观察到以下内容
#include <stdio.h> /* perror() */
#include <stdlib.h> /* NULL */
#include <sys/prctl.h> /* prctl(), PR_SET_NAME */
#include <sys/types.h> /* wait() */
#include <sys/wait.h> /* wait() */
#include <unistd.h> /* fork(), sleep() */
int
main()
{
const char * name = "it_worked";
switch (fork())
{
case 0:
if (prctl(PR_SET_NAME, (unsigned long) name) < 0)
perror("prctl()");
sleep(10);
break;
case -1:
perror("fork()");
break;
default:
if (wait(NULL) < 0)
perror("wait()");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这表明显然“它有效”。
请注意,名称的最大长度限制为 16 个字节,包括终止的 NUL 字节。引用手册页:
使用 指向的位置中的值设置调用线程的名称
(char *) arg2
。名称最长可达 16 个字节,包括终止空字节。(如果字符串的长度(包括终止空字节)超过 16 个字节,则该字符串将被静默截断。)
归档时间: |
|
查看次数: |
2012 次 |
最近记录: |