Come Utilizzare il timeout di Comando su Linux

0
527
Fatmawati Achmad Zaenuri/Shutterstock.com

OK, basta con i computer. Si può dare i processi di limiti di tempo, l’impostazione di un tempo massimo che può funzionare con il timeoutcommand. Ecco un tutorial per mettere limiti dei programmi in esecuzione con questo comando.

Cosa timeout Fare Per Voi?

Il timeout di comando che permette di impostare un limite per la lunghezza di tempo in cui un programma viene eseguito per. Ma perchè vuoi farlo?

Un caso è quando si sa esattamente per quanto tempo si desidera un processo di correre per. Un uso comune-case è di avere il controllo del timeout di una registrazione o di acquisizione dei dati, il programma in modo che il file di log non inesorabilmente divorare il vostro spazio su disco rigido.

Un altro caso è quando non sai per quanto tempo si desidera un processo per eseguire, ma sai che non si desidera eseguire a tempo indeterminato. Si potrebbe avere un abitudine di impostazione di processi in esecuzione, riducendo al minimo la finestra di terminale, e dimenticare su di loro.

Alcuni programmi, anche semplici programmi di utilità—in grado di generare traffico di rete a livelli che possono ostacolare le prestazioni della rete. O si può legare le risorse su un dispositivo di destinazione, rallentamento delle prestazioni. (ping, sto guardando te). Lasciando questi tipi di programmi in esecuzione per lunghi periodi, mentre sei lontano dal computer è cattiva pratica.

timeout è parte della GNU Core Utils così Linux e sistemi operativi Unix-like come macOS tutti hanno timeout costruito a destra in. Non c’è niente da installare; si può usare a destra, fuori dalla scatola.

Iniziare Con timeout

Ecco un semplice esempio. Per esempio, con i suoi default opzioni della riga di comando, il comando ping verrà eseguito fino a quando non si arresta premendo Ctrl+C. Se non si interrompe, ti basta andare avanti.

ping 192.168.4.28

Utilizzando timeout, possiamo verificare che il ping non funziona su e su, a masticare larghezza di banda di rete e rompere le scatole a qualsiasi dispositivo viene eseguito il ping.

Questo comando utilizza timeout per tempo-limite di ping. Stiamo permettendo 15 secondi di tempo di esecuzione del comando ping.

timeout di 15 ping 192.168.4.28

Dopo 15 secondi di timeout termina il ping sessione e siamo tornati al prompt della riga di comando.

Timeout, Con Altre Unità di Tempo

Si noti che non abbiamo bisogno di aggiungere una “s” dietro le 15. timeout assume il valore è espresso in secondi. Si potrebbe aggiungere una “s”, ma in realtà non fa differenza.

Per utilizzare un valore di tempo, misurato in minuti, ore o giorni, aggiungere una “m”, una “h” o “d”.

Per avere ping correre per tre minuti, utilizzare il seguente comando:

timeout 3m ping 192.168.4.28

ping per tre minuti prima del timeout passi e si ferma il ping sessione.

Limitando l’Acquisizione di Dati Con timeout

Alcuni dati i file di acquisizione può crescere molto rapidamente. Per evitare che tali file diventando ingombrante o anche problematico dimensioni, limitare la quantità di tempo che il programma di cattura è consentita l’esecuzione.

In questo esempio, stiamo tcpdump, un traffico di rete strumento di cattura. Sulle macchine di prova che questo articolo è stato ricercato, tcpdump è già stato installato in Ubuntu Linux e Fedora Linux. Doveva essere installato su Manjaro Linux e Arch Linux, con il seguente comando:

sudo pacman -Syu tcpdump

Siamo in grado di eseguire tcpdump per 10 secondi con le sue opzioni di default, e reindirizzare l’output in un file chiamato capture.txt con il seguente comando:

timeout di 10 sudo tcpdump > capture.txt

(tcpdump ha le proprie opzioni per salvare catturato il traffico di rete di un file. Questo è un trucco, perché stiamo discutendo di timeout, non tcpdump.)

tcpdump inizia a catturare il traffico di rete e vi aspettiamo per 10 secondi. E 10 secondi viene e va e tcpdump è ancora in esecuzione, e capture.txt è ancora in crescita in termini di dimensioni. Sta andando a prendere un rapido Ctrl+C per interrompere tcpdump.

Controllare la dimensione del capture.txt con ls mostra che è cresciuto a 209K in una manciata di secondi. Che il file è stato crescendo velocemente!

ls -lh capture.txt

Che cosa è successo? Perché non timeout interrompere tcpdump?

È tutto a che fare con segnali.

L’Invio Del Segnale

Quando timeout vuole interrompere un programma che invia il segnale SIGTERM. Questo chiede gentilmente la terminazione del programma. Alcuni programmi possono scegliere di ignorare il segnale SIGTERM. Quando ciò accade, dobbiamo dire timeout di essere un po ‘ più forte.

Possiamo fare che da chiedere timeout per inviare il segnale SIGKILL, invece.

Il segnale SIGKILL non può essere “pescato, bloccato o ignorato”—prende sempre attraverso. SIGKILL non educatamente chiedere l’arresto del programma. SIGKILL nasconde dietro l’angolo, con un cronometro e un manganello.

Possiamo utilizzare l’opzione-s (segnale) possibilità di comunicare con il timeout per inviare il segnale SIGKILL.

timeout -s SIGKILL 10 sudo tcpdump > capture.txt

Questa volta, non appena trascorsi più di 10 secondi, tcpdump è fermato.

Chiedendoci Prima

Ci si può chiedere timeout per cercare di fermare il programma utilizzando il segnale SIGTERM, e solo per l’invio in SIGKILL se il segnale SIGTERM non ha funzionato.

Per fare questo, utilizziamo i -k (uccidere dopo) opzione. L’opzione-k richiede un tempo di valore come parametro.

In questo comando, stiamo chiedendo di timeout per far dmesg durata di 30 secondi, per poi terminare con il segnale SIGTERM. Se dmesg è ancora in esecuzione dopo 40 secondi, significa che il diplomatico SIGTERM è stato ignorato e timeout deve inviare il segnale SIGKILL a finire il lavoro.

dmesg è una utility che consente di monitorare il buffer del kernel messaggi e li visualizza in una finestra di terminale.

timeout -k 40 30 dmseg -w

dmesg funziona per 30 secondi e si ferma quando riceve il segnale SIGTERM.

Sappiamo che non era SIGKILL che ha smesso di dmesg perché SIGKILL lascia sempre una sola parola di necrologio nella finestra del terminale: “ha Ucciso.” Che non è accaduto in questo caso.

Recupero Codice di Uscita del Programma

Ben educati programmi passa un valore per la shell, quando termina. Questo è noto come un codice di uscita. Di solito questo è usato per raccontare la shell–o di qualunque processo, ha lanciato il programma— se i problemi sono stati rilevati dal programma come corse.

timeout fornisce il proprio codice di uscita, ma a noi non importa di che. Ci sono probabilmente più interessati al codice di uscita del processo che ha timeout è il controllo.

Questo comando consente di eseguire il ping per cinque secondi. È il ping di un computer chiamato Nostromo, che è la rete di prova che è stato utilizzato per la ricerca di questo articolo.

timeout di 5 ping Nostromo.locale

Il comando viene eseguito per cinque secondi timeout e la interrompe. Possiamo quindi controllare il codice di uscita usando questo comando:

echo $?

Il codice di uscita è di 124. Questo è il valore di timeout utilizza per indicare che il programma è stato risolto utilizzando il segnale SIGTERM. Se SIGKILL termina il programma, il codice di uscita è di 137.

Se interrompiamo il programma con Ctrl+C il codice di uscita dal timeout è pari a zero.

timeout di 5 ping Nostromo.locale
echo $?

Se l’esecuzione del programma termina prima del timeout terminato, il tempo di timeout può passare il codice di uscita dal programma di shell.

Perché questo avvenga è necessario che il programma si arrestano spontaneamente (in altre parole, non è terminato da timeout), e si deve utilizzare l’opzione –preserve-opzione di stato.

Se si utilizza l’opzione-c (conta) opzione con un valore di cinque ping solo a fuoco spento cinque richieste. Se diamo timeout della durata di un minuto, ping avrà sicuramente risolto da sé. Possiamo quindi controllare il valore di uscita utilizzando eco.

timeout –preserve-stato 1m ping-c 5 Nostromo.locale
echo $?

ping completa i suoi cinque le richieste di ping e termina. Il codice di uscita è pari a zero.

Per verificare il codice di uscita è venuta dal ping, andiamo a forza di ping per generare un diverso codice di uscita. Se si tenta di inviare le richieste di ping ad un IP inesistente indirizzo, ping fallisce con un errore di codice di uscita. Possiamo quindi utilizzare un eco per controllare che il codice di uscita è diverso da zero.

timeout –preserve-stato 1m ping-c 5 NotHere.locale
echo $?

Il comando ping, ovviamente, non può raggiungere l’inesistente dispositivo, in modo che segnala l’errore e si chiude. Il codice di uscita è di due. Questo è il codice di uscita ping utilizza generale errori.

Impostazione Di Regole Di Base

timeout è tutto di fornire alcuni confini dei programmi in esecuzione. Se c’è un pericolo i file di registro potrebbero superamento del vostro disco rigido o che si potrebbe dimenticare di sinistra, uno strumento di rete in esecuzione, avvolgeteli in timeout e lasciare che il computer si auto-regolano.

CONTINUA A LEGGERE

  • “Google Stadi È in procinto di schiantarsi Contro ISP Data Caps
  • “Come Disattivare le Immagini in Chrome la Barra degli Indirizzi di Suggerimenti per la Ricerca
  • “Perché Windows 10 Dice la Tua Rete Wi-Fi “non È Sicuro”
  • “Di Google Chrome Passa Carte: la Mia Nuova Cosa Preferita non sapevo che avrei Voluto
  • “Come Preoccupato Dovrebbe Essere di Circa i Rischi per la Salute di 5G?