博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
系统调用之getpid
阅读量:4215 次
发布时间:2019-05-26

本文共 791 字,大约阅读时间需要 2 分钟。

这个函数用于获得线程组的领导线程的pid其源码分析如下:SYSCALL_DEFINE0(getpid){	#这里可以看是当前进程	return task_tgid_vnr(current);}static inline pid_t task_tgid_vnr(struct task_struct *tsk){	#走到这一步,就和gettid的实现一模一样	return __task_pid_nr_ns(tsk, __PIDTYPE_TGID, 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();	#这里我们没有指定namespace,因此用当前进程的namespace	if (!ns)		ns = task_active_pid_ns(current);	#当前进程大部分情况下不为null	if (likely(pid_alive(task))) {	#这里形参的type就是__PIDTYPE_TGID,因此if条件成立,最终给type赋值为PIDTYPE_PID		if (type != PIDTYPE_PID) {			if (type == __PIDTYPE_TGID)				type = PIDTYPE_PID;			#得到这个线程组的领导线程			task = task->group_leader;		}		#获取领导线程的pid		nr = pid_nr_ns(rcu_dereference(task->pids[type].pid), ns);	}	rcu_read_unlock();	#返回这个pid	return nr;}

转载地址:http://vjnmi.baihongyu.com/

你可能感兴趣的文章
设计模式中类的关系
查看>>
策略模式、代理模式
查看>>
单例模式(singleton),工厂方法模式(factory),门面模式(facade)
查看>>
抽象模式,适配器模式(Adapter),模板方法模式(Template method)
查看>>
建造者模式(builder),桥梁模式(bridge mode),命令模式(Command mode)
查看>>
装饰模式(Decorator),迭代器模式(Iterator),组合模式(composite)
查看>>
观察者模式(Observer),责任链模式,访问者模式(Visitor)
查看>>
状态模式(State)
查看>>
堆、归并排序
查看>>
总结23中设计模式应用场景
查看>>
插入排序、希尔排序、冒泡排序、快速排序、选择排序、堆排序、归并排序
查看>>
C#命名空间
查看>>
C++中模版的使用
查看>>
TCP链接(三次握手)和释放(四次握手)
查看>>
面试中各类二叉树题型的整理
查看>>
快速排序
查看>>
插入算法
查看>>
希尔排序
查看>>
选择排序
查看>>
归并排序
查看>>