Hvordan tidsavbryte en kommando i Bash uten unødvendig forsinkelse

Hvordan Tidsavbryte En Kommando I Bash Uten Unodvendig Forsinkelse



I Bash kan det hende du må kjøre en kommando som tar lang tid å fullføre, og du vil kanskje ikke vente på at den skal fullføres 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 tidsavbryte en kommando i Bash uten unødvendig forsinkelse.

Tidsavbrudd for en kommando i Bash

For å tidsavbryte en kommando i Bash, kan vi bruke 'pause' kommando. 'Timeout'-kommandoen er ikke tilgjengelig som standard på alle systemer, men den kan installeres ved å bruke pakkebehandleren på de fleste Linux-distribusjoner, her er syntaksen til 'timeout'-kommandoen:







pause [ ALTERNATIV ] VARIGHET KOMMANDO [ ARG ]


Her er 'OPTION' et valgfritt argument som spesifiserer virkemåten til timeout-kommandoen, 'DURATION' er tidsgrensen for kommandoen å kjøre, og 'COMMAND [ARG]' er kommandoen og dens argumenter som vi ønsker å kjøre.



La oss for eksempel si at vi vil kjøre 'sleep'-kommandoen i fem sekunder, men vi ønsker å tidsavbryte kommandoen etter tre sekunder, og her er et eksempel på skallskriptet:



#!/bin/bash
ekko 'Starter søvnkommando med tidsavbrudd på 3 sekunder...'
timeout 3s sove 5s
ekko 'Søvnkommando fullført.'


Her har jeg spesifisert varigheten av timeouten som 3 sekunder, og varigheten av 'sleep'-kommandoen som 5 sekunder. 'Timeout'-kommandoen vil stoppe 'sleep'-kommandoen etter 3 sekunder, selv om 'sleep'-kommandoen normalt kjører i 5 sekunder.






For å forhindre unødvendig forsinkelse når du bruker 'timeout'-kommandoen, kan vi bruke '-k'-alternativet. Alternativet '-k' spesifiserer et signal som vil bli sendt til kommandoen hvis den overskrider tidsavbruddsgrensen. Dette signalet vil føre til at kommandoen avsluttes umiddelbart, i stedet for å vente på at den skal fullføres elegant.

La oss for eksempel si at vi vil kjøre 'sleep'-kommandoen i fem sekunder, men vi ønsker å tidsavbryte kommandoen etter tre sekunder og sende SIGINT-signalet hvis det overskrider tidsavbruddsgrensen. Vi kan gjøre dette ved å kjøre følgende kommando:



#!/bin/bash
ekko 'Starter søvnkommando med tidsavbrudd på 3 sekunder og SIGINT-signal etter 2 sekunder'
timeout -k 2s 3s søvn 5s
ekko '
Sove kommando ferdig. '


Her har jeg spesifisert timeout-varigheten som 3 sekunder og signalet som skal sendes som SIGINT hvis det overskrider timeout-grensen. Alternativet '-k 2s' spesifiserer at SIGINT-signalet skal sendes etter to sekunder av tidsavbruddsgrensen.

Konklusjon

Tidsavbrudd for 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 den umiddelbart hvis den overskrider tidsavbruddsgrensen. Dette vil hjelpe deg å spare tid og kjøre skriptene dine mer effektivt.