Como executar um comando em um processo que não é filho do processo atual?

3

Estou tendo um problema de conflito de biblioteca ao chamar um programa externo de dentro de um ambiente de programação interpretada (IDL). A questão parece ser que, como o programa que estou chamando acaba sendo filho do IDL, as bibliotecas não estão sendo recarregadas.

A partir do IDL, posso iniciar subprocessos diretamente ou usando um shell. Existe uma boa maneira de fazer meu programa ser executado sem acabar como um processo filho?

A única solução que encontrei até agora é usar ssh localhost my_program . Isso funciona perfeitamente, mas eu gostaria de uma solução mais direta.

    
por amicitas 19.10.2011 / 10:30

1 resposta

3

Um conjunto diferente de bibliotecas dinâmicas pode ser carregado pelo IDE porque seu aplicativo herda um ambiente diferente que é usado pelo vinculador dinâmico para localizar as bibliotecas. Consulte página de manual do arquivo para ver as variáveis de ambiente que podem afetar o comportamento do linker dinâmico. Seu IDE deve ter opções para controlar isso.

Se você ainda quiser garantir que seu aplicativo seja executado a partir de um processo que não tenha seu IDE como ancestral, configure o IDE para executar um comando como este:

bash -c 'your_app &'

isto fará o bash rodar o seu_app em segundo plano e sair. Quando o processo pai (aqui: bash) sai, o filho (aqui: your_app) é adotado pelo processo init, significando que o init (PID = 1) se torna seu pai. Novamente, no entanto, isso não afetará as bibliotecas carregadas.

Você também pode executar um script de servidor que aguarda por um sinal (usando o comando trap) e executa seu aplicativo quando ele o recebe. Seu IDE deve então ser configurado para executar um comando kill para enviar o sinal para o servidor. Desta forma, você estará executando seu aplicativo no mesmo ambiente que o seu terminal. Esta é provavelmente uma solução de overkill.

Minha recomendação é tentar configurar o IDE para que as bibliotecas certas sejam usadas pelo processo filho.

    
por 19.11.2011 / 01:00

Tags