linux中通过proc获取进程名以及PID

  • 背景
    • 给定某个线程的线程号tid,获取对应的进程名
  • 解决
    • 刚开始以为有难度,需要遍历整个proc/***以及/proc/***/task/***;因为拿到的是tid而非pid,该tid是由某个pid通过pthread_create或fork、clone出来的,只有找到对应的pid,才能从/proc/***/status下获取进程名;
    • 但是linux下,tid和pid就是一个东西,内核中是完全不区分这两个概念(即线程和进程);体现在/proc下就是,不论tid还是pid,都可以在根目录下找到;因此直接读取/proc/tid/status文件即可获取进程名
    • 当然,如果tid是由某个pid创建出来的,在/proc/pid/task是可以找到对应tid的,这也就是pstree工具的实现原理;
    • 从这也可以看出,fork以及pthread_create其实最终到内核中,使用的都是一条创建路径;由此也可以看出,在linux中没有所谓的进程和线程之分,内核中,都是进程,就是一个task_struct结构体,重而进行执行调度
  • 源码
 void getNameByPid(pid_t pid, char *task_name) {
     char proc_pid_path[BUF_SIZE];
     char buf[BUF_SIZE];

     sprintf(proc_pid_path, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值