Signale sollen eine rudimentäre Form der Kontrolle über einen Prozess bereitstellen, nicht als IPC-Mechanismus. Signale haben mehrere Probleme, wenn sie als irgendetwas anderes verwendet werden:
-
Viele Systemaufrufe werden durch ein Signal unterbrochen und müssen speziell behandelt werden.
-
Dementsprechend ist viel Code in freier Wildbahn nicht signalsicher.
-
Signale haben außer sich selbst keinerlei Dateninhalt. Dies macht sie als Nachrichtenübermittlungsmethode meistens unbrauchbar.
-
Es gibt nur begrenzte Möglichkeiten in einem Signal-Handler.
-
Am wichtigsten ist, dass nachfolgende Signale des gleichen Typs nicht in die Warteschlange gestellt werden – sie werden zusammengeführt in eine Instanz.
-
Noch wichtiger ist, dass es keine Garantie dafür gibt, dass Signale in der gleichen Reihenfolge geliefert werden, in der sie generiert wurden . Von der Handbuchseite:
Stehen hingegen für einen Prozess mehrere Standardsignale an, ist die Reihenfolge, in der sie geliefert werden, unbestimmt .
Sie könnten theoretisch In der Lage sein, eine Art Kanal einzurichten, indem mehrere Signale hin und her gehen, wobei einige wie eine Art Bestätigung wirken, aber keine vernünftige Person würde so etwas versuchen wollen. Sie können stattdessen auch Rauchzeichen verwenden...
Ist IPC (Inter Process Communication) mit Signal Catch und Signal Raise möglich?
Ja und nein. Wenn Sie nur Signale betrachten, können Sie ein Signal an einen anderen Prozess senden, aber Sie können nichts anderes als nur ein Signal senden.
Ich möchte mit diesem Signal auch Nachrichten weitergeben. Kann ich es schaffen? Ist es möglich?
Nein, nicht so, wie Sie es versuchen. Dazu können Sie Sockets, Dateien, Pipes oder Named Pipes verwenden. Wenn Sie mehr über UNIX IPC erfahren möchten, lesen Sie Fortgeschrittene Programmierung in der UNIX-Umgebung.
Nein, versuchen Sie nicht, Signale dafür zu verwenden. Sie können keine zusätzlichen Daten mit anderen Signalen als der siginfo-Struktur anhängen. Das Hauptproblem bei der Verwendung von Signalen ist jedoch, dass so wenig signalsicher ist. Sie müssen fast alle C-Laufzeitroutinen vermeiden und sicherstellen, dass das empfangende Programm EINTR-Prüfungen für alle seine Kernel-Aufrufe durchführt. Das einzige, was Sie darüber sagen können, wann ein Signal auftritt, ist, dass es nicht so sein wird, wie Sie es erwarten (ein bisschen wie die spanische Inquisition).
Ich schlage vor, Sie schauen sich die anderen IPC-Mechanismen an, wie Shared Memory, Message Queues, Fifos (Named Pipes) und Sockets.