这个系统调用返回当前进程当前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
最新推荐文章于 2024-04-21 00:16:06 发布