从手册来看,似乎ps -AO wchan
应该告诉我一切都在睡觉,但一切都显示为-
. (并nwchan
作为0
)。他们是否废除了内核中旧的sleep()
/接口,或者我是否需要调整一些设置来获取信息?tsleep()
如果p->p_wchan
在 Darwin 11 中实际上始终为零,是否有另一种方法可以找出正在等待的进程?
编辑:确实,p->p_wchan
甚至没有在内部定义struct proc
,sysctl
接口只是在导出时将字段清零。中有uu_wchan
和uu_wmesg
成员struct uthread
,由接口设置_sleep
并通过模拟tsleep
函数设置,但我还没有找到任何东西可以使这些成员可供用户空间使用。ps -MAO wchan
一方面不是。
(整个struct uthread
事情似乎是 XNU 特有的,一种将 FreeBSD 接口改造到 Mach 上的方法,因此从其他地方找到解决方案的希望很小)。