Jak uruchamiać aplikację przez określony czas w powłoce

12

Jeśli i jak można, Terminalwewnątrz, uruchomić aplikację przez 30 sekund, zanim zostanie ona wymuszona zamknięcie i echo dzienników tego procesu?

ir-g
źródło
@JacobVlijm Idealnie działałoby jako skrypt powłoki ze względu na przenośność języka, głównie dlatego, że zamierzonym obszarem użytkowania jest usługa CI.
ir-g
1
@ ir-g możesz użyć polecenia timeout . np. komenda timeout 30s
mcantsin

Odpowiedzi:

19

Możesz użyć polecenia limitu czasu .

timeout -k 10s 30s command

który uruchomi polecenie przez 30 sekund i zabije go po 10 sekundach, jeśli nadal działa. - Sprawdź stronę podręczną, aby uzyskać więcej opcji.

mcantsin
źródło
1
@ ir-g nie ma za co. Możesz także sprawdzić polecenie watch , które jest podobne, a także bardzo łatwe w użyciu w wierszu poleceń.
mcantsin
2
Dzięki za ten wskaźnik, watchwydaje mi się bardzo interesującym poleceniem. Może się przydać ...
ir-g
3

Oto dwa sposoby (ale timeoutpolecenie sugerowane przez mcantsin jest prawdopodobnie lepsze):

  1. Uruchom polecenie w tle, w ten sposób zostanie zapisany jego PID $!i możesz go użyć, aby zabić go po określonym czasie:

    command &
    sleep 30 && kill $!
  2. Uruchom polecenie i użyj pkilllub, killallaby je zabić. UWAGA: Zakłada się, że działa tylko jedno polecenie o tej nazwie, używam firefoxjako przykładu:

    firefox &
    sleep 30 && pkill firefox

Nie mam pojęcia, co rozumiesz przez „dzienniki tego procesu”, ale standardowy błąd procesu można zapisać w pliku za pomocą command 2> logfile.txt.

terdon
źródło