Warum ist es verboten, fork ohne exec in mac zu verwenden?

8

Meine Frage ist ziemlich einfach. Unter Linux ist es sehr beliebt, fork ohne exec

zu verwenden

Ich habe jedoch festgestellt, dass dies auf MacOS nicht möglich ist (siehe Handbuch Gabel)

Ссылка

  

Es gibt Grenzen dafür, was Sie im Child-Prozess tun können. Um absolut sicher zu sein, solltest du dich selbst einschränken        Selbst, um nur Async-Signal-sichere Operationen auszuführen, bis eine der exec-Funktionen ist        namens. Es sollte davon ausgegangen werden, dass alle APIs einschließlich globaler Datensymbole in einem Framework oder einer Bibliothek verwendet werden        unsicher nach einem fork (), sofern nicht ausdrücklich als sicher oder async-signalsicher dokumentiert. Wenn Sie verwenden müssen        Diese Frameworks im untergeordneten Prozess müssen Sie ausführen. In dieser Situation ist es sinnvoll, sich selbst zu exekutieren.

Das erscheint mir seltsam? Was ist der Grund? Ist es möglich, es zu umgehen?

    
Georgy Buranov 17.09.2013, 16:08
quelle

1 Antwort

6

Es ist in Ordnung, fork in OS X zu verwenden, unter den gleichen Einschränkungen, die Sie fork mit Linux verwenden würden. Linux hat ähnliche Vorbehalte .

Wenn Sie eine Anwendung erstellen, die single-threaded ist und auf den grundlegenden UNIX-APIs und der Designphilosophie beruht, sollten Sie in Ordnung sein. Wenn Sie mit zusätzlichen Bibliotheken verknüpfen, sollten Sie mit ihrem Verhalten vertraut sein. Stellen Sie sich vor, Sie würden zu einer Bibliothek verlinken, die einen Hintergrund-Thread gestartet hat - nach der Verzweigung befinden Sie sich in einem möglicherweise nicht definierten Zustand, da nur der Thread namens fork geklont wird.

OS X bietet einige tolle Funktionen, um mehrere Kerne zu nutzen, wie z. B. Grand Central Dispatch , die eine Überlegung wert sind .

Ich würde Ihnen empfehlen, diesen Artikel von Mike Ash zu lesen auf Gabel Sicherheit unter OS X.

    
Stuart Carnie 17.01.2014 04:28
quelle

Tags und Links