Hur att Använda timeout-Kommandot i Linux

0
345
Fatmawati Achmad Zaenuri/Shutterstock.kom

OK, det är nog datorn tiden. Du kan ge processer tidsfrister, som sätter en maximal tid de kan köra med timeoutcommand. Här är en handledning för att sätta gränser för program som kör med det här kommandot.

Vad Gör timeout Göra För Dig?

Timeout kommando låter dig ställa in en gräns på hur lång tid ett program som kommer att köra för. Men varför skulle du vilja göra det?

Det ena fallet är när du vet exakt hur lång tid du vill ha en process för att köra för. Ett vanligt användningsområde-målet är att ha timeout-kontroll en avverkning eller data-capture-programmet så att loggfiler inte obevekligt sluka din hårddisk utrymme.

Ett annat fall är när man inte vet hur länge du vill ha en process för att köra för, men du vet att du inte vill att det ska löpa på obestämd tid. Du kanske har en vana av att ställa processer som körs för att minimera terminal-fönstret, och glömma bort dem.

Vissa program–även enkla verktyg kan skapa nätverk trafik på nivåer som kan hindra prestanda i ditt nätverk. Eller de kan binda upp resurser på ett mål enhet, sakta ner sin prestanda. (ping, jag tittar på dig.) Att lämna dessa typer av program som körs under längre perioder medan du är borta från din dator är dålig praxis.

timeout är en del av GNU-Kärnan Utils så Linux-och Unix-liknande operativsystem såsom macOS alla har timeout inbyggda. Det är inget att installera; du kan använda den direkt ur lådan.

Komma Igång Med timeout

Här är ett enkelt exempel. Till exempel, med sina förvalda alternativ på kommandoraden, ping-kommandot kommer att köras tills du stänger av den genom att trycka på Ctrl+C. Om du inte avbryta det, det ska bara hålla igång.

ping 192.168.4.28

Med timeout kan vi se till att ping inte köra på och på, tugga upp bandbredd och tjat oavsett vilken enhet som pingade.

Denna nästa kommando använder timeout för att tidsfristen ping. Vi är så 15 sekunder av körning för ping.

timeout 15 ping 192.168.4.28

Efter 15 sekunder timeout upphör ping-session och vi är tillbaka till kommandoraden.

Med timeout Med Andra Gång Enheter

Observera att vi inte behövde lägga till ett “s” bakom 15. timeout förutsätter att värdet är i sekunder. Du kan lägga till ett “s”, men det gör egentligen ingen skillnad.

Att använda en time-värdet mäts i minuter, timmar eller dagar på att lägga till ett “m”, som är ett “h” eller “d.”

Att ha ping springa i tre minuter, använd följande kommando:

timeout 3m ping 192.168.4.28

ping kommer att pågå i tre minuter innan timeout steg in och stoppar ping session.

Begränsning av datafångst Med timeout

Vissa data capture-filer kan växa sig stora väldigt snabbt. För att förhindra att sådana filer blir otymplig eller till och med problematiska i storlek, begränsa den mängd tid fånga programmet är tillåtet att köra.

I detta exempel, vi använder tcpdump, ett nätverk trafik fånga verktyg. Om testet maskiner att denna artikel har forskat på, tcpdump redan var installerat i Ubuntu Linux och Fedora Linux. Det måste vara installerad på Manjaro Linux och Arch Linux, med följande kommando:

sudo pacman -Syu tcpdump

Vi kan köra tcpdump för 10 sekunder med sina förvalda alternativ, och rikta sin utdata till en fil som heter capture.txt med följande kommando:

timeout 10 sudo tcpdump > capture.txt

(tcpdump har sina egna alternativ för att spara infångade nätverkstrafik till en fil. Detta är en snabb hacka på grund av att vi diskuterar timeout, inte tcpdump.)

tcpdump börjar fånga nätverket trafik och vi vänta i 10 sekunder. Och 10 sekunder kommer och går och tcpdump är fortfarande igång, och capture.txt fortfarande växer i storlek. Det kommer att ta ett förhastat Ctrl+C för att stoppa tcpdump.

Kontrollera storleken för capture.txt med ls visar att det växte till 209K inom loppet av några sekunder. Filen växte snabbt!

ls -lh capture.txt

Vad hände? Varför inte timeout stopp tcpdump?

Det har allt att göra med signaler.

Skicka Rätt Signal

När timeout vill stoppa ett program skickar SIGTERM signal. Detta artigt ber programmet att avsluta. Vissa program kan man välja att ignorera SIGTERM signal. När det händer, vi måste berätta för timeout för att vara lite mer kraftfullt.

Det kan vi göra genom att ställa timeout för att skicka SIGKILL signal istället.

Den SIGKILL signal kan fångas, blockeras eller ignoreras”—det blir alltid igenom. SIGKILL inte artigt be programmet att sluta. SIGKILL gömmer sig runt hörnet med ett stoppur och en cosh.

Kan vi använda växeln-s (signal) möjlighet att berätta för timeout för att skicka SIGKILL signal.

timeout -s SIGKILL 10 sudo tcpdump > capture.txt

Den här gången, så snart som 10 sekunder har gått, tcpdump är stoppad.

Frågar Artigt Första

Vi kan be timeout för att försöka stoppa programmet med hjälp SIGTERM, och att bara skicka in SIGKILL om SIGTERM fungerade inte.

För att göra detta använder vi -k (döda efter) alternativ. -K alternativet kräver en tid värde som parameter.

I det här kommandot frågar vi timeout för att låta dmesg kör i 30 sekunder, för att sedan avsluta det med SIGTERM signal. Om dmesg är fortfarande i drift efter 40 sekunder, det innebär att den diplomatiska SIGTERM ignorerades och timeout bör skicka i SIGKILL för att avsluta jobbet.

dmesg är ett verktyg som kan övervaka kärnan ring buffert meddelanden och visa dem i ett terminalfönster.

timeout -k 40 30 dmseg -w

dmesg kör i 30 sekunder och stoppar när den tar emot SIGTERM signal.

Vi vet att det inte var SIGKILL som stannade dmesg eftersom SIGKILL lämnar alltid ett ord dödsruna i terminal-fönstret: “Dödad.” Det skedde inte i detta fall.

Hämta Programmet Exit Kod

Väluppfostrade program passera ett värde tillbaka till skalet när de upphör att gälla. Detta är känt som en exit-kod. Typiskt används för att berätta för skal–eller vilken process som inleddes programmet— om problem med programmet som det gick.

timeout som ger sin egen exit kod, men vi kan inte bryr sig om det. Vi är förmodligen mer intresserade av att avsluta koden från den process som timeout är bestämmande.

Med detta kommando kan köra ping för fem sekunder. Det är pinga en dator som kallas Nostromo, som är på prov nätverk som användes till forskning denna artikel.

timeout 5 ping Nostromo.lokala

Kommandot körs i fem sekunder timeout och säger det. Vi kan då kontrollera avsluta koden med hjälp av detta kommando:

echo $?

Slutkoden är 124. Detta är värdet för timeout använder för att indikera att programmet avslutades med SIGTERM. Om SIGKILL avslutar programmet, slutkoden är 137.

Om vi avbryter programmet med Ctrl+C exit kod från timeout är noll.

timeout 5 ping Nostromo.lokala
echo $?

Om genomförandet av programmet slutar innan timeout säger det, timeout kan passera avfarten koden från programmet tillbaka till skalet.

För att detta ska ske måste programmet kommer att upphöra av sig själv (med andra ord, är det inte sägs upp av timeout), och vi måste använda –preserve-status alternativ.

Om vi använder -c (räkna) alternativ till ett värde av fem ping kommer endast att avfyra fem ansökningar. Om vi ger timeout en varaktighet av en minut, ping kommer definitivt upphöra av sig själv. Vi kan då kontrollera marknadsvärde med hjälp av echo.

timeout –preserve-status 1m ping -c 5 Nostromo.lokala
echo $?

ping avslutar sina fem ping-förfrågningar och avslutar. Slutkoden är noll.

För att kontrollera felkoden kommer från ping, låt oss kraft ping vill generera en annan utgång kod. Om vi försöker att skicka ping-anrop till en icke-existerande IP-adress, ping kommer att misslyckas med ett fel exit kod. Vi kan då använda echo för att kontrollera att avsluta koden är icke-noll.

timeout –preserve-status 1m ping -c 5 NotHere.lokala
echo $?

Ping-kommandot uppenbarligen inte kan nå den icke-existerande enhet, så det rapporterar fel och stänger ner. Slutkoden är två. Detta är exit kod ping använder för övrigt fel.

Inställning Spelregler

timeout handlar om att tillhandahålla vissa gränser för att köra program. Om det finns en fara loggfiler kan överskrida din hårddisk eller att du kan glömma att du lämnat ett nätverk igång, linda in dem i timeout och låta datorn själv reglera.

LÄS NÄSTA

  • “Googles Arenor Är på Väg att Krascha Mot ISP Data Caps
  • “Hur för att Inaktivera Bilder i Chromes adressfält sökförslag
  • “Varför Windows 10 Säger att Din Wi-Fi-Nätverk “inte Säker”
  • “Google Chrome för Muspekaren Kort: Min Nya Favorit Sak som jag inte Visste att jag Ville
  • “Hur Orolig Bör Du Vara Om hälsorisker av 5G?