Próbuję uruchomić coś takiego:
sudo dhclient $wifi || otherFunction
Problem pojawia się, gdy dhclient
kończy się niepowodzeniem, po prostu zawiesza się zamiast generować błąd.
Jak mogę przepisać powyższe, aby dhclient
było zabity i otherFunction
zostaje wywołany, jeśli dhclient
nie zakończy się w 60 sekund?
Odpowiedź
Twój tag timeout zapewnia wszystko:
sudo timeout 60 dhclient $wifi || otherFunction
Przykład:
sudo timeout 3 sleep 5 || echo finished early
Wykorzystywane jest narzędzie timeout udostępniony przez pakiet GNU coreutils w systemie Linux.
Komentarze
Odpowiedź
Użyj timeout
.
timeout 2 sleep 1 echo $? 0 timeout 1 sleep 2 echo $? 124
Komentarze
- nie ' niestety nie działa na MacOS
Odpowiedź
Użyj timeout
spakowanego jako gtimeout
z coreutils
port w brew
:
brew install coreutils gtimeout --help
To „będzie działać z /usr/local/bin
w Twoim PATH
. Jeśli chcesz używać timeout
zgodnie z pierwotną nazwą, dodaj /usr/local/opt/coreutils/libexec/gnubin
do swojego PATH
.
timeout
dla MacOS: stackoverflow.com/a/21118126/451480timeout
zabijania e polecenie (w przeciwieństwie do polecenia, które zawiodło z innych powodów), sprawdź stan wyjścia 124.