Bash scripting - segnali: differenze tra le versioni

m
nessun oggetto della modifica
m (rimosso template autori)
mNessun oggetto della modifica
 
(Una versione intermedia di uno stesso utente non è mostrata)
Riga 1: Riga 1:
{{Bash_scripting}}
{{Bash scripting}}
=Segnali=
__TOC__
Ogni processo in Unix e Unix-like può ricevere dei segnali da altri processi (se appartengono allo stesso utente oppure da root). Di seguito i principali, tra quelli previsti da ''POSIX'':
Ogni processo in Unix e Unix-like può ricevere dei segnali da altri processi (se appartengono allo stesso utente oppure da [[root]]). Di seguito i principali, tra quelli previsti da [[POSIX]]:
* '''INT''' : è equivalente a <code>Ctrl-c</code> da tastiera, per uno script associato a un terminale, se non è eseguito in background. L'azione di default è la terminazione;
* '''INT''' : è equivalente a <code>Ctrl-c</code> da tastiera, per uno script associato a un terminale, se non è eseguito in background. L'azione di default è la terminazione;
* '''QUIT''' : è equivalente a <code>Ctrl-\</code> da tastiera, per uno script associato a un terminale, se non è eseguito in background. L'azione di default è la terminazione con core dump;
* '''QUIT''' : è equivalente a <code>Ctrl-\</code> da tastiera, per uno script associato a un terminale, se non è eseguito in background. L'azione di default è la terminazione con core dump;
Riga 17: Riga 17:
* '''USR2''' : è un segnale lasciato da definire all'utente. L'azione di default è la terminazione.
* '''USR2''' : è un segnale lasciato da definire all'utente. L'azione di default è la terminazione.


Il ''core dump'' è un dump dello stato (o una sua parte) del processo terminato, a scopo di debug. Può essere limitato e anche disattivato interamente. Se non attivo, l'azione eseguita è equivalente a una terminazione senza core dump.
Il ''core dump'' è un dump dello stato (o una sua parte) del processo terminato, a scopo di [[debug]]. Può essere limitato e anche disattivato interamente. Se non attivo, l'azione eseguita è equivalente a una terminazione senza core dump.


==Invio di segnali==
== Invio di segnali ==
Alcuni segnali vengono inviati automaticamente, al sussistere di determinate condizioni, ma possono anche essere inviati esplicitamente con il comando <code>kill</code> come tutti gli altri.<br/>
Alcuni segnali vengono inviati automaticamente, al sussistere di determinate condizioni, ma possono anche essere inviati esplicitamente con il comando <code>kill</code> come tutti gli altri.<br/>
Sintassi: <code>kill [ -s SIGNAL ] pid</code><br/>
Sintassi: <code>kill [ -s SIGNAL ] pid</code><br/>
Invia un segnale (di default: TERM) al processo con il pid scelto. Si noti che l'invio è asincrono, ossia <code>kill</code> non resta in attesa che il processo con pid scelto effettui l'azione associata al segnale. Di conseguenza il comando ha sempre successo, salvo che il pid non esista o non possa ricevere il segnale (per esempio perché non è dello stesso utente).
Invia un segnale (di default: TERM) al processo con il PID scelto. Si noti che l'invio è asincrono, ossia <code>kill</code> non resta in attesa che il processo con PID scelto effettui l'azione associata al segnale. Di conseguenza il comando ha sempre successo, salvo che il PID non esista o non possa ricevere il segnale (per esempio perché non è dello stesso utente).


==Cattura dei segnali==
== Cattura dei segnali ==
Le azioni da intraprendere possono essere modificati con l'istruzione <code>trap</code>.<br/>
Le azioni da intraprendere possono essere modificati con l'istruzione <code>trap</code>.<br/>
Sintassi: <code>trap 'stringa' SIGNAL1 [ ... ]</code><br/>
Sintassi: <code>trap 'stringa' SIGNAL1 [ ... ]</code><br/>
Riga 37: Riga 37:
In caso di esecuzione di una subshell le azioni da intraprendere in seguito alla ricezione di un segnale vengono reimpostate al loro valore di default, ma i segnali ignorati continuano a restare ignorati.
In caso di esecuzione di una subshell le azioni da intraprendere in seguito alla ricezione di un segnale vengono reimpostate al loro valore di default, ma i segnali ignorati continuano a restare ignorati.


===Esempi===
=== Esempi ===
* Ignora i segnali di terminazione:
* Ignora i segnali di terminazione:
<pre>
<pre>
6 999

contributi