这个系统调用返回当前进程当前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; }
系统调用之sys_gettid
猜你喜欢
转载自blog.csdn.net/tiantao2012/article/details/80244550
今日推荐
周排行