Comment exécuter l'application pendant une durée définie dans le shell

12

Si et comment est-il possible, en Terminal, de faire fonctionner une application pendant 30 secondes, avant de la fermer de force et de faire écho aux journaux de ce processus?

ir-g
la source
@JacobVlijm Il fonctionnerait idéalement comme un script shell en raison de la portabilité du langage, principalement car le domaine d'utilisation prévu est un service CI.
ir-g
1
@ ir-g vous pouvez utiliser la commande timeout . par exemple commande timeout 30s
mcantsin

Réponses:

19

Vous voudrez peut-être utiliser la commande timeout .

timeout -k 10s 30s command

qui exécutera la commande pendant 30 secondes et la tuera après 10 secondes si elle est toujours en cours d'exécution. - Consultez la page de manuel pour plus d'options.

mcantsin
la source
1
@ ir-g vous êtes les bienvenus. Vous pouvez également vouloir vérifier la commande watch , qui est similaire et également très facile à utiliser dans la ligne de commande.
mcantsin le
2
Merci pour ce pointeur, watchme semble être une commande très intéressante. Pourrait être utile ...
ir-g
3

Voici deux façons (mais la timeoutcommande suggérée par mcantsin est probablement meilleure):

  1. Lancez la commande en arrière-plan, de cette façon son PID est enregistré $!et vous pouvez l'utiliser pour le tuer après l'heure spécifiée:

    command &
    sleep 30 && kill $!
  2. Lancez la commande et utilisez pkillou killallpour la tuer. ATTENTION: Cela suppose qu'une seule commande avec ce nom est en cours d'exécution, j'utilise firefoxcomme exemple:

    firefox &
    sleep 30 && pkill firefox

Je n'ai aucune idée de ce que vous entendez par «les journaux de ce processus» mais l'erreur standard d'un processus peut être enregistrée dans un fichier avec command 2> logfile.txt.

terdon
la source