Proceso engendrado de la aplicación multiproceso

Tengo una situación en la que necesito generar un proceso auxiliar desde una aplicación muy grande y multiproceso, sobre la cual no tengo control completo.

Ahora estoy usandofork()/exec(). Esto funciona la mayor parte del tiempo, pero en algunas circunstancias el niño se cuelga extrañamente antes de laexec() sucede. Sospecho que esto se debe a quefork()ing aplicaciones multiproceso generalmente se considera una idea realmente mala.

Realmente me gustaría una forma de iniciar un proceso atómicamente, sinfork()ing the parent: con todos los descriptores de archivo cerrados, el entorno configurado de la manera que quiero, CWD configurado, etc. Esto debería evitar todo el horror defork()ing mi aplicación principal multiproceso, y lidiando con la herencia del descriptor de archivo, etc.posix_spawn() debería ser ideal. Desafortunadamente, en Linux,posix_spawn() se implementa usandofork() yexec() ...

vfork() se define para suspender el proceso padre hasta que el hijo llame aexec(). Esto parece ser más como lo que quiero, pero entendí quevfork() se considera generalmente una reliquia histórica en estos días y es equivalente afork() --- ¿Sigue siendo el caso?

¿Cuál es la forma menos mala de lidiar con esto?

Tenga en cuenta que

No puedo generar mi proceso antes de que comience ningún subproceso (porque no puedo ejecutar código en ese punto) No puedo rediseñar mi aplicación para no necesitar el proceso auxiliar, debido a requisitos externos No puedo suspender todos mis hilos antes de generar el proceso auxiliar, porque no me pertenecen

Esto está en Linux. Java está involucrado, pero todosm el código está en C.

Respuestas a la pregunta(2)

Su respuesta a la pregunta