3 votos

comprobar el estado de un proceso de "reposo" en curso desde el terminal

¿Existe una manera de comprobar cuánto tiempo le queda a un proceso "dormido" en ejecución antes de que termine dentro de la terminal?

4voto

Jose Chavez Puntos 645

El comando de sueño en sí mismo no ofrece ningún servicio que permita controlar el tiempo de sueño restante. Tampoco se muestra en ninguna parte.

Como el comando sleep opera sin emitir una serie de llamadas al sistema para el kernel, tampoco podrás utilizar una herramienta de depuración típica como dtruss. Si intentas utilizar el depurador lldb para adjuntarte al proceso, verás que el comando sleep también se interrumpe y no puede continuar.

Por lo tanto, no es posible determinar con precisión la cantidad de tiempo que queda. Si puedes conformarte con un resultado impreciso, haz lo siguiente:

Primero ejecuta este comando:

ps xa | grep sleep

Esto debería mostrarte el comando sleep con el número de segundos que se supone que duerme en total. Por ejemplo:

1234 s0123 S+    0:00.01 sleep 789

Aquí 789 es el número de segundos 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 ha estado funcionando el proceso:

  03:15 sleep

Esto significa que el proceso ha dormido durante 3 minutos y 15 segundos = 195 segundos. El tiempo de reposo restante es de 789 - 195 = 594 segundos.

2voto

user48577 Puntos 19

Si su versión de ps soporta etimes ( etime en segundos ) (lamentablemente no es compatible con MacOS), puede utilizarlo para calcular el tiempo restante:

ps xa -o etimes,command | awk '/[s]leep/ {print "time remaining for", $2, "is", $3 - $1, "seconds"}'

Ejemplo de salida:

time remaining for sleep is 94 seconds

O se puede simplificar para que sólo aparezca el número:

ps xa -o etimes,command | awk '/[s]leep/ {print $3 - $1}'

Estos comandos mostrarán más de una línea si hay más de una sleep proceso se está ejecutando.

Nota: Ni el etime ni etimes emite segundos fraccionarios, pero sleep puede aceptarlos como argumento. Esto probablemente afectará a 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
     }'

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X