comando-bash-trap | Linuxiano.it
Privacy Policy

comando-bash-trap

comando-bash-trap

Il comando-bash-trap nei sistemi informatici e operativi, un trap, noto anche come eccezione o guasto, è tipicamente un tipo di interrupt sincrono causato da una condizione eccezionale (ad esempio, breakpoint, divisione per zero, accesso alla memoria non valido).

Una trappola di solito si traduce in un passaggio alla modalità kernel, in cui il sistema operativo esegue alcune azioni prima di restituire il controllo al processo di origine. Una trappola in un processo di sistema è più grave di una trappola in un processo utente e in alcuni sistemi è fatale. In alcuni casi, il termine trap si riferisce specificamente a un interrupt destinato ad avviare un interruttore di contesto su un programma di monitoraggio o un debugger.

Derivando da questo utilizzo originale, trap viene talvolta utilizzato per il meccanismo di intercettazione del normale flusso di controllo in alcuni domini.

In SNMP, un trap è un tipo di PDU utilizzato per segnalare un avviso o un altro evento asincrono su un sottosistema gestito.

Nei sistemi unix un comando bash incorporato viene utilizzato per eseguire un comando quando la shell riceve un segnale è chiamato “trap”. Quando si verifica un evento, bash invia la notifica con qualsiasi segnale. Molti segnali sono disponibili in bash. Il segnale più comune di bash è SIGINT (Signal Interrupt). Quando l’utente preme CTRL + C per interrompere qualsiasi processo dal terminale, questo segnale viene inviato per informare il sistema. Come è possibile utilizzare il comando trap per gestire diversi tipi di segnali verrà spiegato in questo tutorial.

Sintassi

trap [ -lp ] [ [ arg ] signal_spec … ]

oppure

trappola [action] [signal]

Descrizione:

  • -l Viene utilizzato per visualizzare l’elenco di tutti i nomi dei segnali con il numero corrispondente.
  • -p Viene utilizzato per visualizzare il comando di segnale o il comando trap per signal_spec.
  • arg È usato per eseguire un comando quando la shell riceve il segnale (i).
  • signal_spec Contiene il nome del segnale o il numero del segnale.

Il comando Trap senza valore arg o con il valore ‘-‘ arg reimposta il segnale specificato al suo valore originale.
Il comando trap con valore di argomento “null” ignora il segnale specificato inviato dalla shell o dal comando.
Un signal_spec con il valore, exit (0) eseguirà arg dopo essere uscito dalla shell.
Un signal_spec con il valore debug eseguirà arg prima di ogni singolo comando, con il valore restituito eseguirà arg ogni volta che viene eseguita una funzione di shell o uno script eseguito da “.”. e,  con il valore err eseguirà arg ogni volta in caso di errore del comando.

Comando Trap senza alcuna opzione e arg

Eseguire il seguente comando dal terminale per visualizzare l’elenco di tutti i comandi associati a ciascuna condizione. Se un qualsiasi comando `trap` non è impostato prima, il seguente comando non visualizzerà alcuna informazione.

Terminale
  • trap

Comando Trap con opzione -l

Eseguire il seguente comando dal terminale per visualizzare l’elenco di tutti i nomi dei segnali con il numero.

Terminale
  • trap -l

L’output del comando sopra mostrerà la lista di 64 segnali con numeri.

comando-bash-trap

Imposta il comando trap per ERR e EXIT

Questo primo comando qui di seguito imposterà il comando `trap` che verrà eseguito quando si verifica un qualsiasi errore di shell o la shell che si chiude. Questo comando `trap` rimuoverà il file temp.txt dalla posizione corrente. Il comando `ls` è usato per verificare che il file temp.txt esista o meno nella posizione corrente. Infine, il comando exit viene utilizzato per chiudere il terminale ed eseguire il comando `trap` impostato in precedenza.

Terminale
  1. trap ‘rm temp.txt’ err exit
  2. ls
  3. exit

Il seguente output apparirà dopo aver eseguito i comandi sopra elencati.

Ora, se l’utente riapre il terminale dopo l’uscita ed esegue il comando `ls`, il file temp.txt non esiste.
Imposta il comando `trap` con il numero di segnale di SIGUP, SIGQUIT e SIGKILL

Il numero di segnale di SIGUP, SIGQUIT e SIGKILL sono 1, 3 e 9. Il primo comando imposterà una trappola per questi tre segnali. Quando avverrà uno di questi segnali, verrà stampato il messaggio ” Comando Trap eseguito “. Esegui il seguente comando dal terminale.

Terminale

trap ‘echo Trap comando eseguito’ 1 3 9

Quando l’utente preme Ctrl + C per generare il segnale assegnato dal comando `trap`, verrà eseguito il comando` echo` del comando trap e verrà visualizzato il seguente output.

Imposta il comando `trap` per SIGTERM in uno script

Il segnale SIGTERM viene utilizzato per terminare immediatamente il processo rilasciando le sue risorse. Crea un file di bash chiamato ” trapscript.sh ” con il seguente codice. Un ciclo infinito per è dichiarato nello script che stamperà un testo continuamente fino a quando non si verifica il segnale SIGTERM . L’utente deve premere Ctrl + Z per generare il segnale SIGTERM .

trapscript.sh

#!/bin/bash

# Set a trap for SIGINT and SIGTERM signals
trap “echo The program is terminated.” SIGTERM SIGINT

#Display message to generate SIGTERM
echo “Press Ctrl+Z stop the process”

#Initialize counter variable, i
i=1

#declare infinite for loop
for(;;)
do
#Print message with counter i
echo “running the loop for $i times”
#Increment the counter by one
((i++))
done

Esegui lo script eseguendo il seguente comando e premi Ctrl + Z per generare il segnale SIGTERM . Apparirà il seguente output simile.

bash trapscript.sh

Imposta un comando `trap` per eseguire una funzione basata su un particolare segnale

Possiamo associare un comando `trap` a qualsiasi funzione definita dall’utente. Create una bash denominata trapfunc.sh e aggiungere il seguente script. Qui viene dichiarata una funzione personalizzata chiamata func () per stampare un messaggio semplice, “Task completed” . Un ciclo for-in è definito per leggere e stampare l’elenco di tutti i file e le cartelle della directory di lavoro corrente. Il comando `trap` che è definito all’inizio della lista chiamerà la funzione, func () quando terminerà il programma.

trapfunc.sh

#!/bin/bash
# Call func function on exit
trap func exit
# Declare the function
function func() {

echo “Task completed”
}
# Read the files and folders of the current directory list using for loop
for i in *
do
echo “$i”
done

Esegui lo script dal terminale.

Esegui lo script.

bash trapfunc.sh

Il seguente output mostra che il testo “Task completed ” viene stampato dopo aver stampato tutti i file e le cartelle della directory corrente.

Conclusione

Questo tutorial mostra come il comando `trap` può essere usato in Linux per svolgere qualsiasi compito automatizzato basato sul segnale generato. Aiuta gli utenti a tracciare diversi tipi di errori e ad adottare azioni appropriate che possono essere assegnate in precedenza utilizzando questo comando. Molti programmi o script allocano alcune risorse particolari durante l’esecuzione nel sistema. Se un programma o uno script in esecuzione escono o terminano in modo anomalo, le risorse utilizzate da quel programma vengono bloccate. Il comando `trap` può essere usato per risolvere questo problema. L’attività di pulizia delle risorse può essere eseguita facilmente utilizzando questo comando. Spero, il lettore avrà una chiara idea degli usi di questo comando dopo aver letto questo tutorial.

Grazie! per l’utilizzo della Guida di Linuxiano.

Trovi questo tutorial utile? Condividi con i tuoi amici per tenerlo in vita.
Sii il primo a commentare, apprezzo i tuoi suggerimenti. Per ulteriori domande potete commentare qui sotto.