verificando el estado de un proceso de "suspensión" en curso desde el terminal

3

¿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?

    
pregunta BarryBluejeans 06.08.2018 - 20:43

2 respuestas

4

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.

    
respondido por el jksoegaard 06.08.2018 - 22:05
2

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
     }'
    
respondido por el Dennis Williamson 07.08.2018 - 01:30

Lea otras preguntas en las etiquetas