Linux: system () + manipulação SIGCHLD + multithreading
Eu tenho um aplicativo multithread que instala um manipulador para SIGCHLD que registra e colhe os processos filho.
O problema que vejo começa quando estou fazendo uma ligação parasystem()
. system()
precisa esperar que o processo filho termine e o consiga, pois ele precisa do código de saída. É por isso que chamasigprocmask()
para bloquear SIGCHLD. Mas no meu aplicativo multithreaded, o SIGCHLD ainda é chamado em um thread diferente e a criança é obtida antessystem()
tem a chance de fazer isso.
Este é um problema conhecido no POSIX?
Uma maneira de contornar isso é bloquear o SIGCHLD em todos os outros threads, mas isso não é realmente realista no meu caso, já que nem todos os threads são criados diretamente pelo meu código.
Quais outras opções eu tenho?