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 pertencemEste é no Linux. Java está envolvido, mas todos me código está em C.