Délai d'attente d'une commande bash, sans retard inutile,

Cette réponse à Commande en ligne de commande à l'auto-tuer une commande après un certain laps de temps

propose un 1-méthode de la ligne de délai d'attente d'une commande à partir de la ligne de commande bash:

( /path/to/slow command with options ) & sleep 5 ; kill $!

Mais il est possible que d'une "longue" de la commande peut se terminer plus tôt que le délai d'attente. (Nous allons l'appeler une "typiquement au long de la course-mais-parfois-rapide de la commande", ou tlrbsf pour le plaisir.)

Donc cette chouette 1-liner approche a un couple de problèmes. Tout d'abord, le sleep n'est pas conditionnel, ça crée une contrainte de borne inférieure sur le temps pris pour la séquence à la fin. Envisager de 30s ou 2m ou même de 5m pour le sommeil, quand le tlrbsf commande se termine en 2 secondes — est à proscrire. Deuxièmement, la kill est inconditionnel, de sorte que cette séquence va tenter de tuer un non-processus en cours d'exécution et se plaindre.

Donc...

Est-il un moyen en attente d'une-longue-mais-parfois-rapide ("tlrbsf") commande

  • a un bash de mise en œuvre (l'autre question a déjà Perl et C réponses)
  • prendra fin à la plus rapprochée des deux: tlrbsf de fin de programme, ou le délai d'attente écoulé
  • ne sera pas tuer les non-existant/non-processus en cours d'exécution (ou, en option: ne se plaindre sur une mauvaise tuer)
  • n'a pas à être un 1-liner
  • peut s'exécuter sous Cygwin ou Linux

... et, pour les points de bonus, exécute la tlrbsf de commande dans le premier plan et le tout en mode "veille" ou extra processus en arrière-plan, tels que le stdin/stdout/stderr de la tlrbsf de commande peuvent être redirigés, même que si elle avait été exécuté directement?

Si oui, merci de partager votre code. Si non, veuillez expliquer pourquoi.

J'ai passé un certain temps à essayer de pirater le susmentionnés exemple, mais je suis frapper à la limite de mon bash compétences.

InformationsquelleAutor system PAUSE | 2009-03-26