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:Run Code Online (Sandbox Code Playgroud)printk(KERN_INFO "The process is \"%s\" (pid %i)\n", current->comm, current->pid);存储的命令名称
current->comm是当前进程正在执行的程序文件的基本名称(如果需要,则修剪为15个字符).