如何使用其他名称创建子进程

时间:2015-03-02 00:02:08

标签: c linux process fork

我正在使用C,我需要创建一个名称与父级不同的子进程(例如child_test)如何在Linux中使用fork()进行处理?

1 个答案:

答案 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个字节,则会以静默方式截断该字符串。)