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
SIGUSR1und SIGUSR2beide haben die Standardaktion Term- der Prozess wird beendet. ddRegistriert 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
straceAusgaben in einem Shell-Skript…)
{ dd if=/dev/zero of=/dev/null & }; kill -USR1 $!; jobs; sleep 1; jobsum den Effekt zu reproduzieren, den Sie beschreiben.