Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
rush - Signal den Hintergrundprozessen nicht zustellen
Hallo,
in der Aufgabenbeschreibung zur clash steht folgendes:
“Sorgen Sie dafür, dass dieses Signal (SIGINT) von der rush und von ihren Hintergrundprozessen ignoriert wird (sigaction(2)).”
Nun weiß ich nicht, wie ich das anstellen soll. Zudem verhält sich die Vorgabeimplementierung ebenfalls so, dass das Signal nicht immer unterdrückt wird sondern dem Hintergrundprozess zugestellt wird.
Ist das ein Fehler in der Referenzimplementierung oder ist es nicht möglich, dem Kind das Signal vorzuenthalten?
Vielen Dank!
Was genau tust du? Das von dir beschriebene Verhalten kann ich nicht reproduzieren. Wenn man in der Referenz-[m]rush[/m] einen Prozess im Hintergrund startet und Ctrl-C drückt, passiert nichts - genauso wie in der Aufgabenstellung gefordert.
Ich habe ein Programm im Hintergrund gestartet, das selbst wiederum SIGINT abfängt.
Ah, okay. Die Shell sorgt nur dafür, dass [m]SIGINT[/m] initial vom Kindprozess ignoriert wird. Wenn nach dem [m]exec()[/m] das gestartete Programm selbst seine eigene Signalbehandlung verstellt, kann die Shell daran natürlich nichts ändern.
Im “echten Leben” wird dieses Problem nicht dadurch gelöst, dass Signale ignoriert werden, sondern dadurch, dass Hintergrundprozesse in eine eigene Prozessgruppe gesteckt werden. Ein Ctrl-C sorgt nämlich dafür, dass nur die Shell und alle Prozesse aus der selben Prozessgruppe ein [m]SIGINT[/m] erhalten. Das wäre für SP aber ein bisschen zu abgefahren…