Polecenie Bash Run przez określony czas?

12

Tworzę skrypt bash na swój użytek. Jak mogę uruchomić polecenie na określony czas, np. 20 sekund i zakończyć polecenie? Wypróbowałem wiele rozwiązań, ale nic nie działa, próbowałem też limitu czasu bez powodzenia. Proszę dać mi jakieś rozwiązanie tego problemu.

na przykład: chcę uruchomić to polecenie w skrypcie i terminalu po 10 sekundach

some command
Umair Riaz
źródło

Odpowiedzi:

14

Hm, to powinno załatwić sprawę:

xmessage "Hello World" &
pidsave=$!
sleep 10; kill $pidsave

xmessagezapewnia szybki przypadek testowy tutaj (w twoim przypadku polecenie airodump powinno się tam udać); &umieszcza to w tle.

$!posiada PID ostatnio rozpoczętego procesu (patrz np. https://stackoverflow.com/a/1822042/2037712 ); PID zostaje zapisany w zmiennej pidsave.

Po pewnym oczekiwaniu ( sleep) wyślij TERMsygnał do procesu.

mpy
źródło
Dzięki kolego to działa, ale teraz mam 1 problem. Chcę zobaczyć dane wyjściowe tworzone za pomocą polecenia, ale okna xmessage nic nie pokazują.
Umair Riaz
@UmairRiaz: xmessage był tylko przykładem. Aby dostosować swój przykład w pytaniu i zapisać wyniki polecenia, użyj some command > logfile &pierwszego wiersza. Następnie możesz przeanalizować logfile.
mpy
4

Z wiersza polecenia możesz użyć polecenia „

Hennes
źródło
1

Innym sposobem jest użycie wzorca pgrep $ lub wzorca pkill $; zwraca wszystkie identyfikatory PID pasujące do podanego wzorca, przeglądając wszystkie uruchomione procesy na maszynie. Aby ograniczyć zakres PID tylko do tych, które posiadasz, użyj: wzorca pgrep -P $ mypid $ lub wzorca pkill -P $ mypid $

Aby uruchomić proces w tle przez określony czas, skrypt wyglądałby mniej więcej tak:

#!/bin/bash 
mypid=$$
run_something &
sleep $time_in_seconds
pkill -P $mypid something

Należy pamiętać, że spowoduje to zabicie wszystkich procesów o tym samym wzorcu nazw uruchomionych pod bieżącym nadrzędnym PID. Możesz więc użyć tego do uruchomienia wielu procesów i zabicia ich wszystkich jednocześnie po pewnym czasie.

Paweł
źródło