原 如何查看线程在等待IO还是CPU资源
命令
1 | ps -eL -o lwp,pid,ppid,state,comm | grep -E " R | D " |
这条命令用于显示当前系统中处于运行状态 (R) 或不可中断等待状态 (D) 的线程。
让我们逐步解释每个部分的含义:
ps -eL -o lwp,pid,ppid,state,comm
ps:进程状态命令,用于显示系统中正在运行的进程信息。-eL:-e:显示所有进程(包括系统进程)。-L:显示每个进程的线程级别信息。
-o lwp,pid,ppid,state,comm:指定输出的列格式。lwp:显示轻量级进程(Light Weight Process)的 ID,即线程 ID。pid:显示进程 ID。ppid:显示父进程 ID。state:显示线程或进程的当前状态(如运行、睡眠、等待等)。comm:显示可执行命令的名称。
| grep -E " R | D "
|:管道符号,用于将前一部分命令的输出传递给下一部分命令。grep -E " R | D ":grep:用于过滤输出,显示符合指定模式的行。-E:启用扩展的正则表达式。" R | D ":匹配线程或进程状态是R(运行)或D(不可中断等待)的行。状态R表示线程正在运行或就绪状态,D表示线程处于不可中断的睡眠状态(通常在等待 I/O 操作)。
线程状态的解释
R(Running):线程处于运行或就绪状态,正在被 CPU 调度执行。D(Uninterruptible Sleep):线程处于不可中断的等待状态,通常是因为等待 I/O 操作(例如磁盘 I/O),这个状态下线程不能被其他信号打断。
结果分析
执行这条命令会输出系统中所有处于 R 或 D 状态的线程,并显示它们的线程 ID(lwp)、进程 ID(pid)、父进程 ID(ppid)、当前状态(state)、以及执行的命令名(comm)。


