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

Des*_*Ice 8 unix linux process procfs

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

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

chr*_*hrk 12

根据man 2 prctl:

PR_SET_NAME(自Linux 2.6.9起)

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

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


编辑:

让我再说一点.

Linux中的每个进程都对应struct task_struct于内核中的a,其中定义了include/linux/sched.h.

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

    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 */
Run Code Online (Sandbox Code Playgroud)

它的大小TASK_COMM_LEN在上面的同一个头文件中定义,这里16个字节:

/* Task command name length */
#define TASK_COMM_LEN 16
Run Code Online (Sandbox Code Playgroud)

此外,引用LDD3第22页:

...

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

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

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

  • 知道为什么内核开发人员认为在当今时代将可执行文件名称截断为 16 个字符是个好主意吗?这会影响“ps -e -o comm”,它会截断所有进程名称(例如,akonadi 资源,通常具有更长的可执行名称)。 (2认同)