我正在使用C,我需要创建一个名称与父级不同的子进程(例如child_test
)如何在Linux中使用fork()
进行处理?
答案 0 :(得分:3)
您可以使用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;
}
如果我将此程序编译为名为a.out
的可执行文件,然后运行./a.out & ps
,我可以观察以下内容
PID TTY TIME CMD
7462 pts/7 00:00:00 bash
7741 pts/7 00:00:00 a.out
7742 pts/7 00:00:00 it_worked
7743 pts/7 00:00:00 ps
表明显然“它有效”。
请注意,名称的最大长度限制为16个字节,包括终止NUL字节。引用手册页:
使用
(char *) arg2
指向的位置中的值设置调用线程的名称。名称最长可达16个字节,包括终止空字节。 (如果字符串的长度(包括终止空字节)超过16个字节,则会以静默方式截断该字符串。)