Linux timeout commando uitgelegd voor beginners (met voorbeelden)

Soms wil je, wanneer je in Linux een commando uitvoert, dat gedurende een bepaalde tijd laten lopen. Er bestaat een commandoregel hulpprogramma – timeout – dat speciaal voor dit doel ontwikkeld is. In dit artikel zullen we de basisprincipes van dit commando bespreken met behulp van enkele gemakkelijk te begrijpen voorbeelden.

Maar voor we dat doen, is het de moeite waard te vermelden dat alle voorbeelden in deze handleiding getest zijn op een Ubuntu 18.04 LTS machine.

Linux timeout commando

Zoals de naam al doet vermoeden, kun je met het timeout commando in Linux een commando met een tijdslimiet uitvoeren. Hieronder volgt de syntaxis ervan:

timeout [OPTION] DURATION COMMAND [ARG]...

En hier is hoe de man pagina van het gereedschap het uitlegt:

timeout - run a command with a time limit
Start COMMAND, and kill it if still running after DURATION

Hieronder volgen enkele voorbeelden in vraag en antwoord stijl die je een beter idee moeten geven van de werking van dit hulpmiddel.

Q1. Hoe gebruik je het commando timeout?

Het basisgebruik is vrij eenvoudig – voer gewoon ‘timeout’ uit door in de invoer zowel een timeout waarde (beschouwd in seconden) op te geven als het commando dat je wilt uitvoeren.

Bijvoorbeeld, als je een ping commando na 5 seconden wilt laten timeouten, dan kun je in dit geval timeout gebruiken.

timeout 5 ping google.com

Q2. Hoe krijg je de exit status van het commando in de uitvoer?

Standaard geeft het timeout commando, als het succesvol is, 124 als uitgangsstatus. Het volgende is een voorbeeld:

In het eerste geval liet ik het timeout commando met succes lopen, en zoals je kunt zien was de uitgangsstatus 124. Tijdens de tweede run doodde ik het commando echter geforceerd met Ctrl+C, en in dat geval was de uitgangsstatus 0.

Maar in het geval dat je wilt dat timeout de status van het ingevoerde commando teruggeeft, zelfs als timeout met succes loopt, moet je de commandoregeloptie –preserve-status gebruiken.

Bijvoorbeeld:

timeout --preserve-status 5 ping google.com

Q3. Hoe verander je het signaal dat timeout zendt?

Het heeft geen zin te raden dat timeout werkt door een signaal naar het ingevoerde commando te sturen, zodat dat laatste stopt met uitvoeren tegen de tijd dat de deadline nadert. Standaard wordtSIGTERM door het commando gebruikt.

Als je wilt, kun je echter het signaal dat door timeout gezonden wordt veranderen. Hiervoor moet je de -s command-line optie gebruiken en als invoer het signaal opgeven dat je wilt dat timeout zendt.

Bijvoorbeeld:

timeout -s SIGKILL [COMMAND]

Om een lijst op te halen van beschikbare signalen die je kunt zenden, voer je het volgende commando uit:

kill -l

Q4. Hoe kun je timeout automatisch KILL signaal laten zenden?

Soms kun je een invoercommando tegenkomen dat blijft lopen, zelfs nadat timeout het eerste signaal heeft gestuurd. Voor dit soort gevallen biedt timeout een optie ‘–kill-after’.

Hier is hoe de man page het uitlegt:

-k, --kill-after=DURATION

also send a KILL signal if COMMAND is still running

this long after the initial signal was sent

Zoals je ziet moet je dus een tijdsduur opgeven om timeout te laten weten na hoeveel tijd dit signaal verstuurd moet worden.

Conclusie

Afhankelijk van het soort werk dat je doet, kan het timeout commando een heel handig hulpmiddel blijken te zijn. Hier, in deze handleiding, hebben we de meeste van de mogelijkheden die dit hulpmiddel biedt besproken. Als je klaar bent met deze te oefenen, kun je meer over timeout te weten komen door naar zijn man pagina te gaan.