¿Hay alguna forma de verificar cuánto tiempo le queda al proceso de "suspensión" en ejecución antes de que finalice dentro del terminal?
¿Hay alguna forma de verificar cuánto tiempo le queda al proceso de "suspensión" en ejecución antes de que finalice dentro del terminal?
El comando de reposo en sí mismo no ofrece ningún servicio que permita monitorear el tiempo de reposo restante. Tampoco se muestra en ninguna parte.
Como el comando de reposo funciona sin emitir una serie de llamadas al sistema para el kernel, tampoco podrá utilizar una herramienta de depuración típica como dtruss. Si intenta usar el depurador lldb para adjuntar al proceso, encontrará que el comando de suspensión también se interrumpe y no puede continuar.
Por lo tanto, no es posible determinar con precisión la cantidad de tiempo restante. Si puede conformarse con un resultado impreciso, haga lo siguiente:
Primero ejecuta este comando:
ps xa | grep sleep
Esto debería mostrarle el comando de suspensión con la cantidad de segundos que se supone que debe dormir en total. Por ejemplo:
1234 s0123 S+ 0:00.01 sleep 789
Aquí 789 es el número de segundos que se supone que el comando debe dormir en total.
A continuación, ejecute este comando:
ps xa -o etime,command -c | grep sleep
Le mostrará el tiempo total que se ha estado ejecutando el proceso:
03:15 sleep
Esto significa que el proceso se ha suspendido durante 3 minutos y 15 segundos = 195 segundos. El tiempo restante para dormir es 789 - 195 = 594 segundos.
Si su versión de ps
admite etimes
( etime
en segundos ) (desafortunadamente no es compatible con MacOS), puede usar esto para calcular el tiempo restante:
ps xa -o etimes,command | awk '/[s]leep/ {print "time remaining for", $2, "is", $3 - $1, "seconds"}'
Salida de ejemplo:
time remaining for sleep is 94 seconds
O puede simplificar eso para mostrar solo el número:
ps xa -o etimes,command | awk '/[s]leep/ {print $3 - $1}'
Estos comandos emitirán más de una línea si se está ejecutando más de un proceso sleep
.
Nota: Ni etime
ni etimes
generan segundos fraccionarios, pero sleep
puede aceptarlos como un argumento. Esto probablemente afectará la precisión de su cálculo.
Para MacOS y otros sin etimes
, puede convertir etime
( ddd-hh:mm:ss
) a segundos, invirtiendo los cálculos realizados en la fuente de ps
(en print.c
):
ps xa -o etimes,command | awk '
BEGIN {
f = "1 60 3600 86400";
split(f, factors)
}
/[s]leep/ {
split($1, parts, "[-:]");
count = length(parts);
for (i = count; i > 0; i--) {
e += parts[i] * factors[count + 1 - i]
};
print e;
e = 0
}'
Lea otras preguntas en las etiquetas sleep-wake