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?


@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.


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.