Respuestas:
Un proceso en S
estado generalmente se encuentra en una llamada del sistema de bloqueo, como leer o escribir en un archivo o la red, o esperar a que termine otro programa llamado.
Puede usar strace -p <pid>
para averiguar qué llamada al sistema está sucediendo actualmente. Producirá resultados como
escribir (1, "foobar" ..., 4096
lo que significa que el proceso está tratando de escribir 4096 bytes comenzando con "foobar" en stdout (fd # 1) pero todo lo que se ha redirigido está ocupado y el búfer de salida está lleno.
Los procesos pasan a estado de suspensión cuando esperan algo, generalmente E / S.
Su proceso estará en S
estado cuando esté haciendo lecturas y posiblemente escrituras que estén bloqueando. También puede ocurrir mientras espera semáforos u otras primitivas de sincronización.
No puede "despertarlo", solo continuará cuando los datos / recursos que está esperando estén disponibles.
Todo esto es normal y esperado, y no suele ser un problema. Normalmente, este "programa" se ejecuta en la línea de comando sin archivo:
while (<>) { print; }
pasará la mayor parte de su tiempo en estado de suspensión, lo cual es bueno: no querrá que desperdicie CPU mientras espera la entrada del usuario.
Si cree que esto es un problema, intente cambiar la forma en que realiza su E / S (leer fragmentos más grandes, en buenos múltiplos del tamaño del bloque del dispositivo subyacente, realizar E / S mapeadas en memoria, etc.).