本文共 732 字,大约阅读时间需要 2 分钟。
这个系统调用返回当前进程当前namespace中leader线程的pid其源码分析如下:SYSCALL_DEFINE0(gettid){ #从这里可以看出是返回当前进程current return task_pid_vnr(current);}static inline pid_t task_pid_vnr(struct task_struct *tsk){ #读取的是PID return __task_pid_nr_ns(tsk, PIDTYPE_PID, NULL);}pid_t __task_pid_nr_ns(struct task_struct *task, enum pid_type type, struct pid_namespace *ns){ pid_t nr = 0; rcu_read_lock(); #本例中ns为null,所以采用当前进程的namespace if (!ns) ns = task_active_pid_ns(current); #如果当前进程已经死了,则返回0 if (likely(pid_alive(task))) { if (type != PIDTYPE_PID) { if (type == __PIDTYPE_TGID) type = PIDTYPE_PID; #可以看到如果当前进程如果有很大线程,则取leader线程的pid task = task->group_leader; } nr = pid_nr_ns(rcu_dereference(task->pids[type].pid), ns); } rcu_read_unlock(); return nr;}
转载地址:http://cjnmi.baihongyu.com/