Hvordan timeout en kommando i bash uten unødvendig forsinkelse

Hvordan timeout en kommando i bash uten unødvendig forsinkelse

I bash kan det hende du må kjøre en kommando som tar lang tid å fullføre, og det er ikke sikkert at du vil vente på at den skal fullføre på ubestemt tid. En løsning på dette problemet er å bruke en timeout -kommando som begrenser hvor lang tid en kommando kan kjøre. Denne artikkelen vil diskutere hvordan du kan få en kommando i bash uten unødvendig forsinkelse.

Timeout en kommando i bash

For å tidsplanere en kommando i bash, kan vi bruke "pause" kommando. Kommandoen "Timeout" er ikke tilgjengelig som standard på alle systemer, men den kan installeres ved hjelp av Package Manager på de fleste Linux -distribusjoner, her er syntaks for "timeout" -kommandoen:

timeout [alternativ] varighetskommando [arg]


Her er "alternativet" et valgfritt argument som spesifiserer oppførselen til timeout -kommandoen, "varighet" er tidsbegrensningen for kommandoen å kjøre, og "kommando [arg]" er kommandoen og dens argumenter som vi ønsker å kjøre.

La oss for eksempel si at vi ønsker å kjøre "Sleep" -kommandoen i fem sekunder, men vi ønsker å timeout kommandoen etter tre sekunder, og her er eksemplet Shell -skriptet:

#!/bin/bash
ekko "Start søvnkommando med timeout på 3 sekunder ..."
Timeout 3s Sleep 5s
ekko "søvnkommando ferdig.""


Her har jeg spesifisert varigheten av tidsavbruddet som 3 sekunder, og varigheten av “Sleep” -kommandoen som 5 sekunder. Kommandoen "timeout" vil stoppe kommandoen "søvn" etter 3 sekunder, selv om "søvn" -kommandoen normalt ville kjørt i 5 sekunder.


For å forhindre unødvendig forsinkelse når vi bruker "timeout" -kommandoen, kan vi bruke alternativet "-K". Alternativet "-K" spesifiserer et signal som vil bli sendt til kommandoen hvis det overstiger tidsavbruddet. Dette signalet vil føre til at kommandoen avsluttes umiddelbart, i stedet for å vente på at den skal fullføre grasiøst.

La oss for eksempel si at vi ønsker å kjøre "Sleep" -kommandoen i fem sekunder, men vi vil timeout kommandoen etter tre sekunder og sende Sigint -signalet hvis det overstiger tidsavbruddet. Vi kan gjøre dette ved å kjøre følgende kommando:

#!/bin/bash
ekko "Start søvnkommando med timeout på 3 sekunder og SIGINT -signal etter 2 sekunder"
timeout -k 2s 3s Sleep 5s
ekko "søvnkommando ferdig.""


Her har jeg spesifisert tidsavbruddsvarigheten som 3 sekunder og signalet som skal sendes som Sigint hvis det overstiger tidsavbruddet. Alternativet "-k 2s" spesifiserer at SIGINT-signalet skal sendes etter to sekunder av tidsavbruddet.

Konklusjon

Tidsavbrudd En kommando i bash er et nyttig verktøy som kan hjelpe deg med å kjøre kommandoer mer effektivt og forhindre unødvendige forsinkelser. Ved å bruke "timeout" -kommandoen og "-k" -alternativet, kan du begrense hvor lang tid en kommando kan kjøre og sende et signal for å avslutte det umiddelbart hvis det overstiger tidsavbruddet. Dette vil hjelpe deg å spare tid og kjøre skriptene mer effektivt.