Pourquoi est-il interdit d’utiliser fork sans exec dans mac?

Ma question est assez simple. Sous Linux, il est assez courant d’utiliser fork sans exec

Cependant, j’ai constaté que cela n’était pas possible sous MacOS (voir le manuel de la fourche)

https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man2/fork.2.html

Il y a des limites à ce que vous pouvez faire dans le processus enfant. Pour être totalement sûr, vous devriez vous limiter vous-même à n’exécuter que des opérations sécurisées avec signal asynchrone jusqu’à ce que l’une des fonctions exec soit appelée. Toutes les API, y compris les symboles de données globaux, dans toute structure ou bibliothèque doivent être considérées comme dangereuses après un fork (), sauf indication explicite explicite de sécurité ou de sécurité du signal asynchrone. Si vous devez utiliser ces frameworks dans le processus enfant, vous devez exécuter. Dans cette situation, il est raisonnable de vous exécuter.

Cela me semble étrange? Quelle est la raison? Est-il possible de contourner le problème?

Vous pouvez utiliser fork dans OS X, avec les mêmes ressortingctions que si vous utilisiez fork avec Linux. Linux a des mises en garde similaires .

Si vous construisez une application à un seul thread et repose sur les API UNIX principales et sur la philosophie de conception, tout devrait bien se passer. Si vous vous connectez à d’autres bibliothèques, vous devez connaître parfaitement leur comportement. Imaginez que vous vous connectiez à une bibliothèque qui a démarré un thread en arrière-plan – après avoir forgé, vous seriez dans un état potentiellement non défini, étant donné que seul le thread appelé fork a été cloné.

OS X offre des fonctionnalités impressionnantes pour tirer parti de plusieurs cœurs, tels que Grand Central Dispatch, qui méritent d’être pris en compte.

Je vous recommande de lire cet article de Mike Ash sur la sécurité des fourches sous OS X.