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.
timeoutdla MacOS: stackoverflow.com/a/21118126/451480timeoutzabijania e polecenie (w przeciwieństwie do polecenia, które zawiodło z innych powodów), sprawdź stan wyjścia 124.