【问题标题】:How to check if pid is threads or process如何检查pid是线程还是进程
【发布时间】:2020-06-01 05:38:28
【问题描述】:

要检查进程ID是否存在,我检查

if (0 != kill(pid, 0))
    printf(" not exist");

/proc/pid/task我可以看到进程id中的所有线程id

如何确定 pid 是 Linux 中的进程还是线程?

【问题讨论】:

  • 也许您可以在proc/pid/status 中找到有用的PidTgid 条目...
  • @dragosht 谢谢! ,有什么简单的方法可以代替用 C 解析这个文件?有点难
  • 我认为没有可用的快速函数调用:stackoverflow.com/questions/26508413/…

标签: c linux pid kill proc


【解决方案1】:

阅读/proc/$pid/stat/proc/$pid/status。如果Tgid(线程组id)字段与Pid字段不同,那么$pid只是一个线程id,而不是进程id。否则,它既是进程 ID,又是进程中第一个线程的线程 ID。

【讨论】:

  • 谢谢! ,有什么简单的方法可以代替用 C 解析这个文件?有点难
  • @paramikoooo 我还没有测试过它,但是解析/proc/$pid/statfscanf 来说应该是微不足道的。格式字段在proc(5) 中列出。
  • 您如何在此链接中看到fscanf 的格式?我想试试....
  • @paramikoooo 如果你将它包装在一个执行sprintffopenfscanffclose 的函数中,你应该几乎可以假装该函数是一个系统调用。
  • @paramikoooo 大约占手册页的 20%。只需 Ctrl+F(或 /-如果你在终端中搜索)%d
【解决方案2】:

你可以查看gettid函数。

PID 必须相等,但在您的情况下 TID 必须不同。

http://man7.org/linux/man-pages/man2/gettid.2.html

【讨论】:

    猜你喜欢
    • 2014-08-18
    • 2011-03-03
    • 1970-01-01
    • 2014-09-27
    • 2013-03-14
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    相关资源
    最近更新 更多