在linux上检测调度线程

在linux上检测调度线程,linux,pthreads,Linux,Pthreads,我需要检测给定的线程当前是否调度到CPU。我在一个带有pthreads的linux系统上。假设我的代码在信号处理程序上运行,我知道我的应用程序中有线程X和Y,我想从信号处理程序中检查X和Y当前是否已计划 谢谢你的帮助。一般来说,如果你不得不问这个问题,你的想法可能不正确。无论你得到什么样的答案,都将立即过时,无论你打算对答案做什么,都将受制于大规模的比赛条件 但是,从理论上讲,您可以查看/proc/getpid()/task/threadid/status,并确定某个特定线程是否正在运行。请注意

我需要检测给定的线程当前是否调度到CPU。我在一个带有pthreads的linux系统上。假设我的代码在信号处理程序上运行,我知道我的应用程序中有线程X和Y,我想从信号处理程序中检查X和Y当前是否已计划


谢谢你的帮助。

一般来说,如果你不得不问这个问题,你的想法可能不正确。无论你得到什么样的答案,都将立即过时,无论你打算对答案做什么,都将受制于大规模的比赛条件


但是,从理论上讲,您可以查看/proc/getpid()/task/threadid/status,并确定某个特定线程是否正在运行。请注意,这在很大程度上是linux的事情,“threadid”和pthread_self()的返回代码或pthread_create的pthread_t copy out之间的任何映射都不是标准的。

一般来说,如果你不得不问这个问题,你的想法可能不正确。无论你得到什么样的答案,都将立即过时,无论你打算对答案做什么,都将受制于大规模的比赛条件


但是,从理论上讲,您可以查看/proc/getpid()/task/threadid/status,并确定某个特定线程是否正在运行。请注意,这在很大程度上是linux的事情,“threadid”和pthread_self()的返回代码或pthread_create的pthread_t copy out之间的任何映射都不是标准的。

您想做什么?检查线程是否正在“运行”或甚至“可运行”会让您的信息很快过时。问题中解释了我要做的事情。您想做什么?检查线程是否“正在运行”甚至“可运行”会给您提供非常快就过时的信息。问题中解释了我要做的事情。谢谢,事实上,我刚刚回来报告/proc实现了我想要的功能,您比我快了。然而,我不欣赏你的“思维错误”评论。我正在开发一个不仅是linux系统,而且应该只在特定发行版上工作的系统。我也不关心竞争条件(这是我想做的统计工作)@bugur:你应该看看
perf sched
工具-这是分析线程调度行为的好方法。@caf:谢谢,这很有趣。我有一个更特殊的用例。我正在跟踪一些线程,并试图找出它们在处理的每个“阶段”中花费了多少时间。每个线程跟踪其当前阶段。由于代码路径阻塞,阶段之间的传输可能会发生得很快,也可能发生得很慢。现在,我有一种方法来分析每个踏板在每个阶段花费了多少时间。问题是,我无法区分阻塞和实际工作。@bugur:每个线程累积的CPU时间不是更有用的信息来源吗?(除非它所做的工作有点急躁)。谢谢,实际上我刚回来报告说/proc得到了我想要的东西,你抢先了我一步。然而,我不欣赏你的“思维错误”评论。我正在开发一个不仅是linux系统,而且应该只在特定发行版上工作的系统。我也不关心竞争条件(这是我想做的统计工作)@bugur:你应该看看
perf sched
工具-这是分析线程调度行为的好方法。@caf:谢谢,这很有趣。我有一个更特殊的用例。我正在跟踪一些线程,并试图找出它们在处理的每个“阶段”中花费了多少时间。每个线程跟踪其当前阶段。由于代码路径阻塞,阶段之间的传输可能会发生得很快,也可能发生得很慢。现在,我有一种方法来分析每个踏板在每个阶段花费了多少时间。问题是,我无法区分阻塞和实际工作。@bugur:每个线程累积的CPU时间不是更有用的信息来源吗?(除非它所做的工作有点急躁)。