进程名称长度的最大允许限制是多少?

时间:2014-05-08 06:25:48

标签: linux unix process procfs

进程名称允许的最大长度是多少?我正在从/proc/[pid]/stat文件中读取进程名称,我想知道我需要的最大缓冲区。

我很确定有一个可配置的限制,但却无法找到它的位置。

1 个答案:

答案 0 :(得分:11)

根据man 2 prctl

  

PR_SET_NAME(自Linux 2.6.9起)

     

使用(char *)arg2指向的位置中的值设置调用线程的名称。 名称最长可达16个字节,如果包含的字节数较少,则应以空值终止。

所以我要去一个 16字节长缓冲区。


编辑:

让我再说一点。

Linux中的每个进程都对应于内核中的struct task_struct,该char comm[TASK_COMM_LEN]include/linux/sched.h中定义。

在这个定义中,有一个字段here,根据注释引用不包括路径的可执行文件名:

    char comm[TASK_COMM_LEN]; /* executable name excluding path
                                 - access with [gs]et_task_comm (which lock
                                   it with task_lock())
                                 - initialized normally by setup_new_exec */

其大小TASK_COMM_LEN在上面的同一个头文件{{3}}中定义为 16个字节

/* Task command name length */
#define TASK_COMM_LEN 16

此外,引用LDD3第22页:

  

...

     

以下语句打印进程ID和当前的命令名称   通过访问struct task_struct中的某些字段来处理:

printk(KERN_INFO "The process is \"%s\" (pid %i)\n",
        current->comm, current->pid);
     

存储在current->comm中的命令名是程序文件的基本名称   (修剪为15个字符,如果需要)正在由当前进程执行。