假设我正在运行一个简单的 C 程序。如何知道哪个线程正在执行这个程序?或者有什么办法可以让我确定我的程序被翻译成一个进程,这个进程又被分成线程。非常抱歉对整个概念的任何错误理解。如果有一个例子来解释我的困惑的解决方案,那就太好了(其实我想直接问如何输出进程id--->线程数,并列出所有线程id)。如何可视化上述概念(如果它们是正确的顺便说一句)
问问题
1963 次
1 回答
1
除非另有说明,否则程序仅由一个线程组成,即主线程。通过调用 pthread_create (from ) 可以创建更多线程。如果您查看 /proc/pid/status (将 pid 替换为进程 ID),您可以看到程序中的确切线程数。
简而言之,将进程视为一个容器,用于一个或多个线程。执行的是线程本身(线程只是一个寄存器状态),而进程包含虚拟内存映像、打开的文件描述符和其他“对象”。
查看状态文件,您将看到“TGID”和“PID”字段。“PID”实际上是线程ID,而“TGID”是线程组ID,它是真正的进程ID。对于简单的进程(只有一个线程),这些是相等的。但是对于多线程(2 个线程或更多),它们仅对主线程是相等的。除了这个文件之外,“PID”确实意味着进程 ID,因为 Linux 模仿了 UNIX 标准。
您可能想尝试的其他命令: ps -L :这将向您显示“LWP”(这是线程标识符)。如果您查看包含“l”的 ps 的“STATE”列,您可以识别多线程程序,表示多线程进程。
于 2013-01-27T12:05:02.813 回答