Sé que si un proceso entra en D
estado, significa que está en estado ininterrumpible. El proceso no puede ser interrumpido por ninguna señal. Sólo saldrá de ese estado al reiniciar o si finaliza la espera de E/S.
Tengo muchos procesos en D
estado que muestran que algo anda mal en mi máquina. Además, incluso después de reiniciar, vuelven al D
estado. Busqué en línea y encontré que la wchan
sección en la salida de ps indica qué cosa en el kernel está esperando mi proceso.
Cuando uso este comando, ps axl| grep D
aparece -
la columna wchan y no hay ninguna explicación en línea de lo que esto significa.
Este es mi resultado de muestra para el comando anterior.
0 0 69970 1 20 0 25064 1088 - D ? 0:00 ls -l
No puedo entender lo que -
significa el resultado anterior.
Respuesta1
Hay varias razones posibles por las que se informa -
que ps
:
- el proceso simplemente no está bloqueado en el kernel, es decir, se está ejecutando (ver la
state
columna ps) - elprocedimiento de caminata de pilafalla debido a algún caso de esquina o condición de carrera. Incluso puede fallar incondicionalmente, por ejemplo, en núcleos que requieren configuraciones adecuadas de puntero de fotograma pero que se compilaron sin ellas; compruébelo con
cat /proc/*/wchan
: todos los resultados 0 indican que el soporte de wchan no funciona (por ejemplo, actualmente es el caso enFedora 31 y 32) - túno tengolo necesariopermisos del modo de acceso ptrace(es decir
PTRACE_MODE_READ_FSCREDS
) - improbable - ella búsqueda de símbolos fallaen el núcleo - poco probable
Tenga en cuenta que la versión reciente ps
lee la información wchan a la que también /proc/$pid/wchan
puede acceder directamente para realizar pruebas más fácilmente. cat
Ese archivo lee 0
si falló la recuperación de información, lo que ps
se traduce en -
.
En sistemas donde wchan
no funciona un sustituto es mirar (requiere root):
cat /proc/$pid/stack
O alternativamente consultar (no requiere privilegios de root):
cat /proc/$pid/syscall
Respuesta2
en el kernel de Linux más nuevo ves en qué función del kernel está bloqueado tu proceso
cat /proc/<pid_numer>/stack
Respuesta3
La página de manual para ps tiene esta información, "-" significa que el proceso se está ejecutando. Nombre WCHAN de la función del kernel en la que el proceso está inactivo, un "-" si el proceso se está ejecutando o un "*" si el proceso tiene múltiples subprocesos y ps no muestra subprocesos.