Hola a todos,
Muchas gracias por vuestras respuestas. Teniendo en cuenta vuestros comentarios voy a replantearme si sería mejor utilizar otro tipo de comunicación entre procesos que no sea memoria compartida (pipes o sockets por ejemplo).
De todas formas mi mayor duda no era esa, sino buscar la forma de que una aplicación cree un proceso hijo con fork y después ese hijo ejecute el código de otro ejecutable. Los ejemplos que he visto hacen esto usando una llamada a exec, pero por lo que he leído al hacer exec se perdería por ejemplo la memoria compartida que se hubiera definido previamente y no sé si puede afectar también a otros tipos de comunicación entre procesos. Por eso preguntaba si había otras formas de hacerlo. La razón de tener la gui y las comunicaciones en dos aplicaciones distintas es que estas aplicaciones puedan ser desarrolladas por programadores distintos, e incluso usando lenguajes distintos (C puro por un lado, C++ por el otro).
Gracias de nuevo y un saludo.