rocesso @Spawn do aplicativo multithread

Tenho uma situação em que preciso gerar um processo auxiliar a partir de um aplicativo multithread muito grande, sobre o qual não tenho controle tota

gora estou usandofork()/exec(). Isso funciona a maior parte do tempo, mas em algumas circunstâncias a criança trava estranhamente antes doexec() acontece. Eu suspeito que isso é porquefork() em aplicativos multithread é geralmente considerado uma péssima idéi

Gostaria muito, muito, de uma maneira de iniciar um processo atomicamente, semfork() no pai: com todos os descritores de arquivo fechados, ambiente configurado da maneira que eu quero, conjunto CWD etc. Isso deve evitar todo o horror defork() no meu aplicativo pai multithread e lidando com a herança do descritor de arquivo etposix_spawn() deve ser ideal. Infelizmente, no Linux,posix_spawn() é implementado usandofork() eexec() ...

vfork() é definido para suspender o processo pai até que o filho chameexec(). Parece ser mais parecido com o que eu quero, mas meu entendimento era quevfork() é geralmente considerado uma relíquia histórica hoje em dia e é equivalente afork() --- este ainda é o caso?

Qual é a maneira menos ruim de lidar com isso?

Observe que

ão consigo gerar meu processo antes do início de qualquer thread (porque não consigo executar o código nesse moment Não consigo reprojetar meu aplicativo para não precisar do processo auxiliar, devido a requisitos externos Não consigo suspender todos os meus threads antes de iniciar o processo auxiliar, porque eles não me pertencem

Este é no Linux. Java está envolvido, mas todos me código está em C.

questionAnswers(2)

yourAnswerToTheQuestion