进程名称允许的最大长度是多少?我正在从/proc/[pid]/stat
文件中读取进程名称,我想知道我需要的最大缓冲区。
我很确定有一个可配置的限制,但却无法找到它的位置。
答案 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个字符,如果需要)正在由当前进程执行。