So führen Sie eine Anwendung für eine bestimmte Zeit in der Shell aus

12

Wenn und wie ist es möglich, Terminaleine Anwendung für 30 Sekunden zum Ausführen zu bringen, bevor sie zwangsweise geschlossen wird, und die Protokolle dieses Prozesses zu wiederholen?

ir-g
quelle
@JacobVlijm Aufgrund der Portabilität der Sprache wird sie idealerweise als Shell-Skript ausgeführt, da der beabsichtigte Verwendungsbereich ein CI-Dienst ist.
ir-g
1
@ ir-g Sie können den Befehl timeout verwenden . zB Timeout 30s Befehl
mcantsin

Antworten:

19

Möglicherweise möchten Sie den Befehl timeout verwenden .

timeout -k 10s 30s command

Dadurch wird der Befehl 30 Sekunden lang ausgeführt und nach 10 Sekunden beendet, wenn er noch ausgeführt wird. - Weitere Optionen finden Sie auf der Manpage.

mcantsin
quelle
1
@ ir-g gern geschehen. Vielleicht möchten Sie auch den Befehl watch auschecken, der ähnlich und auch in der Befehlszeile sehr einfach zu verwenden ist.
Mcantsin
2
Vielen Dank für diesen Hinweis, watchscheint mir ein sehr interessanter Befehl. Könnte sich als nützlich erweisen ...
ir-g
3

Es gibt zwei Möglichkeiten (aber der timeoutBefehl von mcantsin vorgeschlagen ist wahrscheinlich besser):

  1. Starten Sie den Befehl im Hintergrund, damit seine PID gespeichert wird $!und Sie ihn nach der angegebenen Zeit beenden können:

    command &
    sleep 30 && kill $!
  2. Starten Sie den Befehl und verwenden Sie pkilloder killall, um ihn zu beenden. ACHTUNG: Dies setzt voraus, dass nur ein Befehl mit diesem Namen ausgeführt wird. Ich verwende firefoxals Beispiel:

    firefox &
    sleep 30 && pkill firefox

Ich habe keine Ahnung, was Sie mit "den Protokollen dieses Prozesses" meinen, aber der Standardfehler eines Prozesses kann mit in einer Datei gespeichert werden command 2> logfile.txt.

terdon
quelle