这个函数用于获得线程组的领导线程的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,因此用当前进程的namespaceif (!ns)ns = task_active_pid_ns(current);#当前进程大部分情况下不为nullif (likely(pid_alive(task))) {#这里形参的type就是__PIDTYPE_TGID,因此if条件成立,最终给type赋值为PIDTYPE_PIDif (type != PIDTYPE_PID) {if (type == __PIDTYPE_TGID)type = PIDTYPE_PID;#得到这个线程组的领导线程task = task->group_leader;}#获取领导线程的pidnr = pid_nr_ns(rcu_dereference(task->pids[type].pid), ns);}rcu_read_unlock();#返回这个pidreturn nr;
}

系统调用之getpid相关推荐

  1. Linux用getpid函数调试,由表及里之系统调用(getpid)

    1.看一段程序 这个程序调用了一个函数getpid(),用于获取当前进程的ID号. #include #include int main() { int id; id=getpid(); printf ...

  2. [书]操作系统真象还原 -- 第11、12章 用户进程及调度、系统调用、内存管理

    ======  第 12 章 系统调用.内存管理 ====== GITHUB: https://github.com/trb331617/os_elephant/tree/master/chapter ...

  3. linux学习笔记 -- 系统编程

    系统编程 相关概念 概念 简易cpu结构 mmu内存管理单元 环境变量 PATH SHELL HOME LANG TERM getenv setenv unsetenv 进程控制 fork函数 get ...

  4. 【Linux | 系统编程】Linux系统编程(文件、进程线程、进程间通信)

    文章目录 Linux系统编程 文件IO open/close函数 read/write函数 文件描述符 阻塞.非阻塞 fcntl函数 lseek函数 传入传出参数 文件系统 文件存储 文件操作 sta ...

  5. 进程间通信(IPC):信号

    文章目录 一.信号的概念 1.信号的生命周期和处理流程 2.信号屏蔽字与未决信号集 3.信号4要素 1) 信号的编号 2)信号名 3)信号触发事件 4)信号默认处理方式 二.信号的产生 1.信号产生的 ...

  6. linux系统编程(九) 信号

    文章目录 1.信号 1.1 信号的概念 1.1.1 信号的机制 1.1.2 与信号相关的事件和状态 1.1.3 信号的编号 1.1.4 信号4要素 1.1.5 Linux常规信号一览表 1.2 信号的 ...

  7. 《深入理解计算机系统》----总结

    第一章     计算机系统漫游 主要内容:主要是全面精炼的概括了本书的内容,也就是"计算机系统概述",包括: a)      解释计算机系统中"信息"的概念:就 ...

  8. <Linux>进程概念

    文章目录 一.什么是进程 1.进程概念 2.进程描述 – PCB 3.task_struct内容分类 二.进程的基本操作 1.查看进程 2.结束进程 3.通过系统调用获取进程标示符 4.通过系统调用创 ...

  9. 【Linux】进程概念与进程状态

    文章目录 一.什么是进程 1.进程概念 2.进程描述 -- PCB 二.进程的一些基本操作 1.查看进程 2.结束进程 2.通过系统调用获取进程标示符 3.通过系统调用创建子进程 三.进程状态 1.普 ...

最新文章

  1. Java 23种设计模式有趣见解、总结
  2. Docker的启动与停止命令
  3. redux provider源码解析
  4. C语言运算符优先级 (备忘)
  5. 护肤产生共鸣_通过以人为本的设计编织共鸣的20个指针
  6. [环境搭建]SDN网络感知服务与最短路径应用
  7. 【LeetCode 2】两数相加(链表)
  8. 另一种将线程并入应用程序的方法-委托
  9. php curl详解用法[真的详解]
  10. 08.28 JavaScript 边界 选择修饰符 模式单元 修饰符 正则的使用
  11. php导入跟引入的区别,PHP7 引入的“??” 和“?:”的区别
  12. 2021会宁三中高考成绩查询,2020白银中考分数线
  13. flash cs4 是过渡性产品吗?
  14. 小米手机解锁 usb3.0状态下
  15. 5.FlashFXP连接失败(连接已拒绝)及530 permission denied(以root用户连接已被客户端关闭)
  16. MongoDB 分片集群搭建
  17. Oracle JDK | 迅雷内置浏览器解决 Java 下载需要登录 不能直接复制链接 直接下载慢
  18. linux usb总线接4g,Linux下4G LTE连接
  19. 上海市计算机应用大赛答辩,2017年(第九届)上海市大学生计算机应用能力大赛(决赛)在我校成功举办...
  20. 面试回答问题太紧张,心理有点虚,面完就觉得自己蠢。怎么破!

热门文章

  1. 大不列颠泰迪熊加入PUBG 手游
  2. stm32 不停重启
  3. Android 性能优化最佳实践
  4. java微信无感支付怎么开通_微信无感支付怎么设置?方法介绍
  5. Android 实现书籍翻页效果----完结篇
  6. ubuntu设置软件源
  7. 安装和使用PHP进程管理框架 QPM
  8. Linux MySQL的socket文件存在位置更改
  9. 手撕数据结构—双向循环带头链表
  10. CFF认证 图书馆读者访问信息管理