Ich war mit diesem Kommentar in anderer Frage überrascht :
Wenn Sie dd das USR1-Signal zu früh nach dem Start senden (dh in einem Bash-Skript die Zeile, nachdem Sie es gestartet haben), wird es tatsächlich beendet
Kann jemand erklären, warum ?
Ich war mit diesem Kommentar in anderer Frage überrascht :
Wenn Sie dd das USR1-Signal zu früh nach dem Start senden (dh in einem Bash-Skript die Zeile, nachdem Sie es gestartet haben), wird es tatsächlich beendet
Kann jemand erklären, warum ?
Antworten:
Jedes Signal hat eine "Standarddisposition" - was ein Prozess standardmäßig tut, wenn er dieses Signal empfängt. Es gibt eine Tabelle in der signal(7)
Manpage, in der sie aufgelistet sind:
Signal Value Action Comment
──────────────────────────────────────────────────────────────────────
...
SIGUSR1 30,10,16 Term User-defined signal 1
SIGUSR2 31,12,17 Term User-defined signal 2
SIGUSR1
und SIGUSR2
beide haben die Standardaktion Term
- der Prozess wird beendet. dd
Registriert einen Handler, um das Signal abzufangen und etwas Nützliches zu tun. Wenn Sie jedoch zu schnell signalisieren, hatte er noch keine Zeit, diesen Handler zu registrieren, sodass stattdessen die Standardaktion ausgeführt wird
strace
Ausgaben in einem Shell-Skript…)
{ dd if=/dev/zero of=/dev/null & }; kill -USR1 $!; jobs; sleep 1; jobs
um den Effekt zu reproduzieren, den Sie beschreiben.