Um processo atualmente em execução no modo kernel, ou seja, ocupado em uma chamada de sistema, está no estado D (em oposição a R para execução no modo de usuário ou S para suspensão, ou seja, em uma chamada de sistema mas bloqueada em algo ).
Isso não faz distinção entre um processo que está fazendo computação na CPU enquanto está no modo kernel e um processo que está aguardando algum hardware com sinais desabilitados (a definição estrita de sono ininterrupto). Eu não acho que o Linux expõe essa distinção em qualquer lugar. A computação na CPU enquanto está no modo kernel raramente dura muito tempo.
A versão superior em procps do Linux lista o estado do processo. Não parece ter uma opção para listar apenas processos no estado D, mas você pode usar a opção i
ou a linha de comando -i
para ocultar todos os processos que permaneceram ociosos desde a última atualização de tela, que normalmente deixe menos que uma tela cheia.
Se você quiser apenas listar os PIDs, você pode filtrar a saída de ps
.
ps -o state=,pid= | sed -n 's/^D //p'
Em um sistema que não está fazendo E / S pesada, é de se esperar que na maioria das vezes isso liste zero processos.