struct task_struct结构体中有一个comm成员,
struct task_struct {
...
char comm[TASK_COMM_LEN]; /* executable name excluding path
...
}
在《professional linux kernel architecture》中是这样注释的:
char comm[TASK_COMM_LEN]; /* executable name excluding path
- access with [gs]et_task_comm (which lock
it with task_lock())
- initialized normally by flush_old_exec */
kernel代码的打印信息中常可看到使用该成员表示相关进程信息,例如
printk(KERN_INFO "note: %s[%d] exited\n",
current->comm, task_pid_nr(current));
使用函数set_task_comm设置该成员的值,使用函数get_task_comm获取该成员的值。
char *get_task_comm(char *buf, struct task_struct *tsk)
void set_task_comm(struct task_struct *tsk, char *buf)
有一个调用set_task_comm的路径是这样的:
load_elf_binary
setup_new_exec(bprm)
set_task_comm(current, tcomm);
load_elf_binary函数用来处理elf文件格式
static struct linux_binfmt elf_format = {
.module = THIS_MODULE,
.load_binary = load_elf_binary,
.load_shlib = load_elf_library,
.core_dump = elf_core_dump,
.min_coredump = ELF_EXEC_PAGESIZE,
.hasvdso = 1
};
static int __init init_elf_binfmt(void)
{
return register_binfmt(&elf_format);
}
/* Registration of default binfmt handlers */
static inline int register_binfmt(struct linux_binfmt *fmt)
{
return __register_binfmt(fmt, 0);
}
后面再仔细看看binfmt相关处理细节