您将获得一个 ID 作为流程的输入。我们需要确定它是 PID 还是 TID 此 ID 可以是任何进程,而不是同一进程所必需的。例如:
.\a.out 1234
输出:它是一个线程 ID。
我需要在我的程序中获得相同的信息。如果我做
ps -elf | 1234
它将列出具有给定 ID 的所有条目。PID 和 TID 相同的条目是一个进程,如果它们不同,则它是一个线程。我想通过 C 程序做同样的事情
您将获得一个 ID 作为流程的输入。我们需要确定它是 PID 还是 TID 此 ID 可以是任何进程,而不是同一进程所必需的。例如:
.\a.out 1234
输出:它是一个线程 ID。
我需要在我的程序中获得相同的信息。如果我做
ps -elf | 1234
它将列出具有给定 ID 的所有条目。PID 和 TID 相同的条目是一个进程,如果它们不同,则它是一个线程。我想通过 C 程序做同样的事情
PID 和 TID 都是数字(标识符)。你会怎么区分?在单线程代码中,PID 和 TID 都是相同的。
您可以做的最好的事情是检查您当前的线程或进程。使用 getpid() 获取当前进程id,如果和给定的pid相同,则显然是进程id。
pthread_self() 返回当前线程的 id。
但是,当它可以属于另一个进程或线程时,这将毫无用处。
这适用于 POSIX 线程和 fork 进程 api
编辑:@Chris 建议可以探索 proc 文件系统以获取其他进程和线程 ID。不过,可能需要特权访问。问题下的评论中解释了详细信息