Nie mogę zrozumieć, jak to zrobić, czego potrzebuję, jest po "C" sekund, DD zatrzymuje się. Ale pracuje i ignoruje zarówno podczas pętli, jak i sekund
read c
end=$((SECONDS+$c))
while [ $SECONDS -lt $end ]; do
echo "Moving..."
dd if=/dev/zero of=/dev/null
done
2 odpowiedzi
Dodawanie mojego komentarza jako odpowiedź na kompletność:
Aby zatrzymać proces po danym czasie, możesz uruchomić go za pomocą timeout
Jeśli twój system go zapewnia; Jest częścią GNU Coreutils (ale najwyraźniej nie określono przez POSIX).
W twoim przypadku, zamiast swojej pętli, możesz uruchomić
timeout "$c" dd if=/dev/zero of/dev/null
To nie jak działa pętle. Twoja konstrukcja uruchomi się do dd
zakończy się. Jeśli chcesz go zakończyć po kilku sekundach, powinieneś się go wywołać za pomocą timeout
(prawie na pewno preferowany roztwór) lub wysłać go wyraźnie sygnał. np. coś takiego:
dd if=/dev/zero of=/dev/null &
sleep $c
kill $!
Przy użyciu &
jako terminator polecenia przyczyny dd
, aby uruchamiać asynchronicznie (aka "w tle"), więc sterowanie zwraca natychmiast do powłoki, przechowywanie PID polecenia dd
w zmienna $!
. Shell następnie śpi przez nieco i wysyła sygnał, aby zakończyć dd
.
Podobne pytania
Nowe pytania
bash
W przypadku pytań dotyczących skryptów napisanych dla powłoki poleceń Bash. W przypadku skryptów powłoki z błędami / błędami składniowymi, sprawdź je w programie shellcheck (lub na serwerze web shellcheck pod adresem https://shellcheck.net) przed wysłaniem tutaj. Pytania dotyczące interaktywnego korzystania z Bash częściej dotyczą tematu Super User niż Stack Overflow.