Forum général.cherche-logiciel outil en ligne commande pour exécuter une commande après une autre (déjà lancée)

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
1
8
fév.
2013

Bonjour !

Parfois je lance une commande et je me rend compte qu'elle prend plus de temps que prévu. J'aimerai pouvoir lancer une autre tâche ensuite (soit une autre commande, soit éteindre la machine, soit connaître la date de fin de la première, etc.). J'imagine pouvoir faire quelque chose comme :
$ waitfor --process 1234 --exec 'shutdown -r now'

Ce n'est pas grave si l'exécution n'est pas immédiate (si le délai est d'une minute par exemple).

J'ai cherché s'il existait un outil spécifique, sans succès. J'ai trouvé des propositions de script shell (par exemple ce bout de code dans un forum, ou sur Stackoverflow), mais rien qui ai l'air d'être vraiment maintenu.

Peut-être ai-je utilisé de mauvais termes pour ma recherche ? (Par le passé, j'ai mis du temps à trouver xargs ou tree à cause de cela.)

Des idées ?

  • # ctrl+z et fg

    Posté par  . Évalué à 9. Dernière modification le 08 février 2013 à 03:21.

    Tu peux faire ctrl+z dans la console pour interrompre la commande puis tu la réactives en précisant ce que tu veux qu'il se passe après.

    Exemple :

    $ sleep 10
    ^Z
    [1]+  Stoppé                 sleep 10
    $ fg && echo "je m'exécute à la fin du sleep."
    sleep 10
    je m'exécute à la fin du sleep.
    
    
  • # bash::wait

    Posté par  . Évalué à 4.

    il semble que wait fait exactement ce que tu souhaites :

    $ sleep 100 &
    [1] 26121
    $ wait 26121 && echo "sleep terminé"
    [1]+  Fini                    sleep 100
    sleep terminé
    
    

    si je tu le process, ca ne fonctionne pas sans doute à cause de l'opérateur && ; si jamais remplacer && par ;

    $ sleep 20 & 
    [1] 26172
    $ wait %1 && echo "sleep terminé"
    [1]+  Complété              sleep 20
    
    
    • [^] # Re: bash::wait

      Posté par  . Évalué à 2.

      ha zut, le soucis est que tu ne peux pas faire un wait sur n'importe quel process. Zut.

  • # waitproc

    Posté par  . Évalué à 1.

    le source code est ici et assez récent : https://github.com/vmj/waitproc

    • [^] # Re: waitproc

      Posté par  . Évalué à 4.

      Au final, le code indiqué ne fait que vérifier que le répertoire /proc/PID existe et est accessible.
      Les différentes solutions indiquées sur stackoverflow fonctionnent aussi et il n'y a pas lieu de s'inquiéter du code non maintenu : il n'y a jamais qu'une ligne ou deux !

      Pour la peine, je vais y aller de ma contribution en déclarant ma propre fonction bash (shell) waitproc :

      function waitproc { while [ -e /proc/$1 ] ; do sleep 1 ; done ; }
      
      

      Bon, ça ne teste pas si le process existe bien (sortie immédiate), mais ça devrait faire ce qui est demandé. Pour une sortie plus rapide en fin de process, on peut remplacer le sleep 1 par une valeur inférieure, voire simplement par : (deux points superposés : commande shell qui ne fait rien).

      A+
      JJD

  • # DIY

    Posté par  . Évalué à 2. Dernière modification le 08 février 2013 à 16:55.

    Quelque chose du genre :

    while ( ps --mes-options | grep le-pid-voulu ); do sleep 1; done; ma-commande
    
    

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.