我如何知道进程为何正在等待?

我如何知道进程为何正在等待?

我正在尝试在 OSX Mavericks 上运行命令,但它似乎挂起。我发现这Control + T是一个显示前台作业状态的 Unix 命令。过程中按几次几分钟给我:

$ bin/rake                                                                                
load: 3.68  cmd: ruby 55761 waiting 0.12u 0.02s
load: 3.47  cmd: ruby 55761 waiting 0.12u 0.02s
load: 3.47  cmd: ruby 55761 waiting 0.12u 0.02s
load: 3.09  cmd: ruby 55761 waiting 0.12u 0.02s
load: 2.41  cmd: ruby 55761 waiting 0.12u 0.02s
load: 4.38  cmd: ruby 55761 waiting 0.12u 0.02s

我理解这意味着状态是“等待”,它花费了 0.12 秒的用户时间和仅 0.02 秒的 CPU 时间执行。

我想知道为什么它一直在等待。如何确定进程正在等待的原因

答案1

跑步dtruss查看进程正在执行哪些系统调用:

dtruss -p55761

这将告诉您 PID 55761 的进程当前正在执行哪个系统调用。如果该系统调用访问某个文件描述符,lsof会告诉你那里打开了什么文件。

lsof -p55761

如果文件是管道或套接字,我不知道如何查找另一侧是否有任何东西。

相关内容