Sono stato sorpreso da questo commento in un'altra domanda:
L'invio del segnale USR1 troppo presto dopo l'avvio (ovvero in uno script bash, la riga dopo averlo avviato) lo interromperà di fatto
Qualcuno può spiegare perché ?
Sono stato sorpreso da questo commento in un'altra domanda:
L'invio del segnale USR1 troppo presto dopo l'avvio (ovvero in uno script bash, la riga dopo averlo avviato) lo interromperà di fatto
Qualcuno può spiegare perché ?
Risposte:
Ogni segnale ha una "disposizione di default" - cosa fa un processo di default quando riceve quel segnale. C'è una tabella nella signal(7)
pagina man che li elenca:
Signal Value Action Comment
──────────────────────────────────────────────────────────────────────
...
SIGUSR1 30,10,16 Term User-defined signal 1
SIGUSR2 31,12,17 Term User-defined signal 2
SIGUSR1
ed SIGUSR2
entrambi hanno l'azione predefinita Term
: il processo è terminato. dd
registra un gestore per intercettare il segnale e fare qualcosa di utile con esso, ma se segnali troppo rapidamente non ha ancora avuto il tempo di registrare quel gestore, quindi si verifica invece l'azione predefinita
strace
output in uno script di shell ...)
{ dd if=/dev/zero of=/dev/null & }; kill -USR1 $!; jobs; sleep 1; jobs
per riprodurre l'effetto che stai descrivendo.