(Se avete solo il numero di un segnale e desidera che il nome, kill -l $SIGNAL_NUM
stampa il nome di un segnale, è possibile evitare che utilizzando i nomi al posto dei numeri di segnale nella chiamata a trap
come qui di seguito.)
This answer afferma che l'unico modo per identificare quale segnale è intrappolato in bash è scrivere un wrapper separato per ogni segnale diverso che si desidera intercettare. Another answer on that same question fornisce una funzione wrapper per farlo per voi:
Codice:
#!/bin/bash
trap_with_arg() {
func="$1" ; shift
for sig ; do
trap "$func $sig" "$sig"
done
}
func_trap() {
echo Trapped: $1
}
trap_with_arg func_trap INT TERM EXIT
read # Wait so the script doesn't exit.
Se corro che, allora posso inviare segnali al processo e ottengo output come
Trapped: INT
Trapped: TERM
Trapped: EXIT
Grazie. Ma non funzionerà per me. Quella funzione trap_with_arg() si bloccherà fino a quando non viene ricevuto il segnale. Voglio che il nome del segnale venga visualizzato quando viene ricevuto un segnale - mentre lo script è in esecuzione. Nel mio caso non sto aspettando il segnale. Ogni volta che arriva, deve essere stampato. –
'trap_with_arg()' non blocca. Passa attraverso il suo input, imposta i gestori di trap e quindi ritorna. – perelman
Lunar Mushrooms, potrebbe sembrare di bloccare perché i trap non vengono elaborati mentre i comandi del tuo script sono in esecuzione. Se hai segnalato il tuo script mentre si trovava nel mezzo di un "sonno", non eseguiva la trappola fino a quando il "sonno" non era completo. Non è asincrono. La trappola catturerà i segnali tra i comandi del tuo script. – Ray