3 votes

vérification de l'état d'un processus "sleep" en cours depuis le terminal

Existe-t-il un moyen de vérifier combien de temps il reste à un processus "sleep" en cours d'exécution avant qu'il ne s'arrête dans le terminal ?

4voto

Jose Chavez Points 645

La commande de sommeil en elle-même n'offre aucun service permettant de contrôler le temps de sommeil restant. Elle n'est également affichée nulle part.

Comme la commande sleep fonctionne sans émettre une série d'appels système pour le noyau, vous ne pourrez pas non plus utiliser un outil de débogage typique tel que dtruss. Si vous essayez d'utiliser le débogueur lldb pour vous attacher au processus, vous constaterez que la commande sleep est également interrompue et ne peut être poursuivie.

Il n'est donc pas possible en tant que tel de déterminer très précisément le temps restant. Si vous pouvez vous contenter d'un résultat imprécis, procédez comme suit :

Exécutez d'abord cette commande :

ps xa | grep sleep

Cela devrait vous montrer la commande de sommeil avec le nombre de secondes qu'il est censé dormir au total. Par exemple :

1234 s0123 S+    0:00.01 sleep 789

Ici, 789 est le nombre de secondes que la commande est censée dormir au total.

Ensuite, exécutez cette commande :

ps xa -o etime,command -c | grep sleep

Il vous indiquera la durée totale d'exécution du processus :

  03:15 sleep

Cela signifie que le processus a dormi pendant 3 minutes et 15 secondes = 195 secondes. Le temps de sommeil restant est de 789 - 195 = 594 secondes.

2voto

Dennis Williamson Points 121

Si votre version de ps soutient etimes ( etime sur secondes ) (malheureusement non pris en charge sur MacOS), vous pouvez l'utiliser pour calculer le temps restant :

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

Exemple de sortie :

time remaining for sleep is 94 seconds

Ou vous pouvez simplifier cela pour ne montrer que le numéro :

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

Ces commandes sortiront plus d'une ligne si plusieurs sleep est en cours d'exécution.

Note : Ni l'un ni l'autre etime ni etimes produit des secondes fractionnelles, mais sleep peut les accepter comme un argument. Cela affectera probablement la précision de votre calcul.

Pour MacOS et autres sans etimes vous pouvez convertir etime ( ddd-hh:mm:ss ) aux secondes en inversant les calculs effectués dans la source 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
     }'

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X